gpt4 book ai didi

javascript - 立即访问对象的属性

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

给定这四个定义对象然后尝试立即访问其属性的示例:

{foo: 'bar'}.foo
// syntax error: unexpected_token

我预计这会返回“foo”的值,但它会导致语法错误。

我能想到的唯一解释是对象定义还没有被执行,因此还不是一个对象。似乎对象定义因此被忽略,语法错误来自于尝试执行:

.foo
// results in the same syntax error: unexpected_token

类似地:

{foo: 'bar'}['foo']
// returns the new Array ['foo']

这似乎是对象文字被忽略并执行尾随代码的证据。

然而,这些工作正常:

({foo: 'bar'}).foo
// 'bar'

({foo: 'bar'})['foo']
// 'bar'

圆括号用于运行代码行,由于圆括号运算符的结果是实例化对象,您可以访问属性。

那么,为什么对象定义被忽略,没有立即执行呢?

最佳答案

它并没有被忽略,它只是在这里没有被识别为一个对象。

语句开头的

{ ... } 被解析为 Block[spec] 代码。

{foo: 'bar'}.foo 的情况下,内部代码 foo: "bar" 被解析为 LabelledStatement[spec]

所以 {foo: 'bar'} 解析正确(即使它没有按照您的预期进行)但是属性访问语法实际上导致语法错误,因为访问属性 block 无效。


如您所见,解决方案是将对象括在括号中:

({foo: 'bar'}).foo

( 开始语句会导致解析器在括号内搜索表达式。{foo: 'bar'} 当被解析为表达式时是 Object Initializer[spec] ,如您所料。


对于 {foo: 'bar'}['foo'],它实际上被解析为两个独立的语句:一个 block ({foo: 'bar'} 和数组初始值设定项 (['foo']):

{foo: 'bar'};
['foo'];

关于javascript - 立即访问对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518538/

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