使用对象表示法就好像它是一个数组 - 为什么要评估它?

时间:2016-12-14 15:19:28

标签: javascript

我不明白为什么以下评估结果为3,而不是仅仅在从JavaScript REPL或Chrome的开发人员工具运行时声明语法错误:

{1, 2, 3};
3

据我所知,应该是语法错误,如下所示:

var foo = {1, 2, 3};
Uncaught SyntaxError: Unexpected token ,

我觉得我还有一些我不知道的古怪行为?

1 个答案:

答案 0 :(得分:12)

这里是符号的细分:

  • {启动代码块
  • 1数字文字
  • ,逗号运算符(评估双方,返回右侧)
  • 2数字文字
  • ,逗号运算符
  • 3数字文字
  • }结束代码块

代码块不限于定义ifwhile等块,它们可以在任何地方使用。因此,您的代码只是一个包含链式逗号运算符序列的块,它返回链中的最后一项,因此3

var foo = {1, 2, 3};的情况下,{确实是一个"起始对象字面值"符号而不是"启动代码块"符号

根据上下文,相同的符号可以有多种含义。