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

Joe*_*han 9 javascript

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

{1, 2, 3};
3
Run Code Online (Sandbox Code Playgroud)

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

var foo = {1, 2, 3};
Uncaught SyntaxError: Unexpected token ,
Run Code Online (Sandbox Code Playgroud)

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

Nie*_*sol 12

这是符号的细分:

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

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

在这种情况下var foo = {1, 2, 3};,{确实是"起始对象文字"符号而不是"起始代码块"符号.

相同的符号可以基于上下文具有多种含义.