gpt4 book ai didi

javascript - 异常对象定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:42:24 24 4
gpt4 key购买 nike

在我看来,我偶然发现了这个奇怪的对象声明。

var config = {};
{
config.foo = 'foo';
config.bar = 'bar';
};

它有效,虽然我猜它不会。

很困惑,我在 Chrome DevTools 中打开控制台,然后输入:

var a = {};
// => undefined

到目前为止没有什么奇怪的。但随后我输入:

{ a.b = 'b'; }
// => Uncaught SyntaxError: Unexpected token .

好的,嗯……这不是应该起作用的吗?另一种尝试,不对语句进行单独评估:

var a = {}; {a.b = 'b'};
// => "b"

嗯,没有抛出 SyntaxError。如果我评估 a,我可以看到它的定义符合我的预期。

a;
// => Object {b: "b"}

发生了什么事?我试图用谷歌搜索它,但我不知道要搜索什么,而且我缺乏某种知识来弄清楚发生了什么。有人可以解释一下吗?

最佳答案

在代码中,

var config = {};
{
config.foo = 'foo';
config.bar = 'bar';
};

第二个 {} 中的代码只是分组在一个 block 中的语句。 该 block 用于对多个语句进行分组,并且是有效的语法,因此不会引发任何错误。

代码等价于

var config = {};
config.foo = 'foo';
config.bar = 'bar';

block 内的代码被执行,config对象是

{foo: "foo", bar: "bar"}

block 执行后。

与其使用上述语法,不如使用对象字面量语法来定义对象。

var config = {
foo: 'foo',
bar: 'bar
};

同上代码

var a = {}; {a.b = 'b'};

相当于

var a = {};
a.b = 'b';

可以写成

var a = {
b: 'b';
};

来自 MDN Docs

A block statement (or compound statement in other languages) is used to group zero or more statements. The block is delimited by a pair of curly brackets.


{ a.b = 'b'; } throws Uncaught SyntaxError: Unexpected token .

如果未声明变量 a,这将引发错误。

关于javascript - 异常对象定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37762643/

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