猿问

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);}这代码语法正确,能执行!
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答