javascript - {}.toString() 未捕获语法错误 : Unexpected token

标签 javascript tostring

当我在 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/

相关文章:

java - JPA的BaseEntity中如何实现equals()和hashcode()方法?

javascript - 页面提交/重新加载时未保留下拉选项

javascript - Electron 无法加载具有完整功能的 Web 应用程序

javascript - 使用 Jekyll、react 和 webpack 实例化对象的问题

javascript - CKEditor 3.6.3 启用浏览器拼写检查并禁用上下文菜单

C# Double.ToString() 错误结果

java - 在 toString() 中使用 ∞ 而不是 "infinity"

java - 关键字 "this"和 "toString"到底是什么意思和作用?

java - 这个递归是如何工作的以及如何让它打印出根?

JavaScript 将一个数组与另一个数组匹配?