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

标签 javascript object

我正在阅读 article这表示 {} 是一个有效的 JavaScript 程序。

我试过了,效果很好。

然后我尝试了这个并且成功了:

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


但是然后我尝试了以下,它在逗号处抛出了一个错误。

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


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

最佳答案

{} 是一个空 block 。

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

{name: 'Lord Stark', reignsOver: 'Winterfell'} 是一个 block ,它再次以标签开始,然后是什么都不做的字符串,然后是逗号运算符,然后一个 undefined variable reignsOver,然后是一个冒号,这是无效的语法。

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

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

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

The curly brackets mean that this is an object and it can contain other objects within the curly brackets. Believe it or not this is a valid JavaScript program. If you run it, it creates an empty object which promptly disappears again as the program comes to an end.

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

一些引用资料:
http://www.ecma-international.org/ecma-262/6.0/#sec-block
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/block
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/label

关于javascript - 奇怪的对象怪癖 - JavaScript - 初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018952/

相关文章:

javascript - 如何在 angularJs 中将参数传递给工厂?

javascript - 在 HTML 页面上显示来自 Node.js 服务器的数据

java - 你能告诉我这个程序是如何运作的吗?

javascript - 如果数组包含 2 个相同的对象,则改变第二个(或第三个、第四个)对象的值

javascript - var x ="<?php echo strtotime($uEvents[' start']);?>"; 给出了不同的结果

javascript - Facebook JS SDK 中的 Oauth 错误

javascript - AngularJS/HTML - 引入拦截器后无法执行到同一页面的链接

javascript - 枚举中的点与括号表示法

javascript - 在 $scope 上调用相同的选项对象

javascript - 在javascript中过滤对象数组