当我在 Chrome 开发工具中尝试时,它显示
未捕获的语法错误:意外的标记。
但是,如果当它分配给 a 时:
var a={}.toString();
a //[object Object]
是什么造成了这种差异?
最佳答案
what caused the difference?
解析器所处的状态。默认情况下,解析器处于期望语句的状态。因此,在控制台的示例中, {
看起来像是一个 block 的开头,而不是对象初始值设定项的开头。 (此时您也可以给它一个表达式,因为 JavaScript 有 ExpressionStatement 的概念,它是一个完全由表达式组成的语句。)
但是在您的 var a={}.toString();
代码中,{}.toString()
出现在赋值的右侧,其中解析器需要一个表达式,而不是一个语句。因此 {
启动一个对象初始值设定项。
如果你做了一些事情让解析器需要一个表达式,它也会在控制台中工作:
({}).toString(); // "[object Object]"
或
+{}.toString(); // NaN, because the `+` tries to turn `[object Object]` into a number and fails
关于javascript - {}.toString() 未捕获语法错误 : Unexpected token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39643550/