You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么直接调用对象字面量的默认方法会触发语法错误?

JavaScript 对象字面量调用方法的语法差异解释

首先看两个代码片段的表现:

  • 可正常执行的写法:({}).toString() // 返回 "[object Object]"
  • 抛出语法错误的写法:{}.toString() // Uncaught SyntaxError: Unexpected token '.'

出现该差异的核心原因是JavaScript解析器的语法歧义优先级判定规则:

  • 当解析器遇到行首位置的{时,默认会优先将其识别为块语句的起始标记,而非对象字面量的起始符号。
  • 对于{}.toString()的写法,解析器会先把开头的{}判定为一个不包含任何执行语句的空代码块,块结束之后后续的.toString()就失去了调用主体,属于非法语法,因此直接抛出语法错误。
  • 对于({}).toString()的写法,外层的圆括号()会强制解析器将括号内部的内容判定为表达式,此时{}就会被正确识别为对象字面量,后续调用toString()方法完全符合语法规则,因此可以正常执行得到结果。

补充验证:你可以在浏览器控制台直接输入{a: 1}执行,返回结果是数字1而非对象,本质也是同一个原因:{被识别为块开头,内部的a: 1被解析为带标签(标签名a)的表达式语句,最终返回表达式的结果1。

内容的提问来源于stack exchange,提问作者Eugene Mikhushkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 05:54:02