猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
js对象为什么不能直接操作?
发现一个小问题,在控制台输入{a:1}.toString()会报错,必须要先把{a:1}赋值给一个变量然后在进行操作才行,这是什么情况
一只甜甜圈
浏览 457
回答 1
1回答
守着星空守着你
因为语法规定。因为语法规定导致 js 解释器没有正确理解你的意图。解决办法, 加括号消歧义。({a:1}).toString() // or({a:1}.toString())引申开始以为是 console 的锅,后来发现 node CLI 里一样存在这个问题,于是发现里蹊跷:花括号 {} 除了可以用来定义对象字面量,还可以用来定义代码块。冒号: 除了可以用来定义对象字面量中的 key-value 对外,还可以用来定义 labellabel的概念如果你听说过 C 语言(js就是C系的语法),你听说过有个语句叫 goto,那你应该对 label 有印象。js 里没有 goto,但是有 break 和 continue, 这俩货可以和 label 连用。{a:1}.toString() 之所以报错 unexpected token . ,是因为它被解析成了:{// code blocka: // 定义一个label,名字叫a1 // 这是一条语句,就一个数值 1 }// block 结束了.toString() // 报错,非法字符`.`所以你可以这样玩:{ a:console.log(1);console.log(2);}这代码语法正确,能执行!
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续