我不明白为什么以下评估结果为3
,而不是仅仅在从JavaScript REPL或Chrome的开发人员工具运行时声明语法错误:
{1, 2, 3};
3
据我所知,应该是语法错误,如下所示:
var foo = {1, 2, 3};
Uncaught SyntaxError: Unexpected token ,
我觉得我还有一些我不知道的古怪行为?
答案 0 :(得分:12)
这里是符号的细分:
{
启动代码块1
数字文字,
逗号运算符(评估双方,返回右侧)2
数字文字,
逗号运算符3
数字文字}
结束代码块代码块不限于定义if
,while
等块,它们可以在任何地方使用。因此,您的代码只是一个包含链式逗号运算符序列的块,它返回链中的最后一项,因此3
。
在var foo = {1, 2, 3};
的情况下,{
确实是一个"起始对象字面值"符号而不是"启动代码块"符号
根据上下文,相同的符号可以有多种含义。