gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:21:26 26 4
gpt4 key购买 nike

我正在阅读 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com