奇怪的对象怪癖 - JavaScript - 初学者

时间:2016-05-04 05:11:46

标签: javascript object

我正在阅读article,其中{}是一个有效的JavaScript程序。

我尝试了它并且工作正常。

然后我尝试了这个并且它有效:

{name:'Lord Stark'}< ---整个程序(不将其分配给变量或任何东西)

但是然后我尝试了以下操作,它在逗号处引发了错误。

{name:'Lord Stark',reignsOver:'Winterfell'}< ---这又是整个程序

我的问题是,为什么具有多个属性(以及逗号)的普通对象会返回错误,除非在只有一个条目的对象不分配给变量时?

1 个答案:

答案 0 :(得分:7)

{}是一个空块。

{name: 'Lord Stark'}是一个带有标签的块和一个字符串(它什么都不做)。

{name: 'Lord Stark', reignsOver: 'Winterfell'}是一个块,它再次以标签开始,然后是一个不执行任何操作的字符串,然后是一个逗号运算符,然后是一个未定义的变量reignsOver,然后是冒号,它是无效的语法。

{}仅在表达式上下文中被解释为对象,例如var x = {name: 'Lord Stark', reignsOver: 'Winterfell'};

请注意,控制台可能会运用一些智能并尝试弄清楚您在做什么,并可能正确处理{a: 1, b:2}""作为一个对象。要查看某些内容是如何执行的,您可以尝试输入if (1) {name: 'Lord Stark', reignsOver: 'Winterfell'}

您引用的文章并不完全正确:

  

花括号表示这是一个对象,它可以包含大括号内的其他对象。信不信由你这是一个有效的JavaScript程序。如果你运行它,它会创建一个空对象,当程序结束时它会立即消失。

实际上,{}形式的独立JS程序是一个对象,它是一个空块。

一些参考文献:
Billing Agreements and Reference Transactions
http://www.ecma-international.org/ecma-262/6.0/#sec-block
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/block