我正在阅读article,其中{}
是一个有效的JavaScript程序。
我尝试了它并且工作正常。
然后我尝试了这个并且它有效:
{name:'Lord Stark'}
< ---整个程序(不将其分配给变量或任何东西)
但是然后我尝试了以下操作,它在逗号处引发了错误。
{name:'Lord Stark',reignsOver:'Winterfell'}
< ---这又是整个程序
我的问题是,为什么具有多个属性(以及逗号)的普通对象会返回错误,除非在只有一个条目的对象不分配给变量时?
答案 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