我偶然发现了这个奇怪的物体声明.
var config = {};
{
config.foo = 'foo';
config.bar = 'bar';
};
Run Code Online (Sandbox Code Playgroud)
它有效,但我猜它不会.
困惑我在Chrome DevTools中打开控制台,然后输入:
var a = {};
// => undefined
Run Code Online (Sandbox Code Playgroud)
到目前为止没什么奇怪的.但后来我输入:
{ a.b = 'b'; }
// => Uncaught SyntaxError: Unexpected token .
Run Code Online (Sandbox Code Playgroud)
好吧,嗯......这不应该有用吗?另一种尝试,没有单独评估报表:
var a = {}; {a.b = 'b'};
// => "b"
Run Code Online (Sandbox Code Playgroud)
嗯,没有抛出SyntaxError.如果我评估一个,我可以看到它是按照我的意图定义的.
a;
// => Object {b: "b"}
Run Code Online (Sandbox Code Playgroud)
怎么了?我试图谷歌它,但我不知道要搜索什么,我缺乏某种知识来弄清楚发生了什么.有人可以解释一下吗?
在代码中,
var config = {};
{
config.foo = 'foo';
config.bar = 'bar';
};
Run Code Online (Sandbox Code Playgroud)
第二里面的代码{和}只是语句块分组.该块用于对多个语句进行分组,并且是有效的语法,因此不会引发错误.
代码相当于
var config = {};
config.foo = 'foo';
config.bar = 'bar';
Run Code Online (Sandbox Code Playgroud)
执行块内的代码,config对象是
{foo: "foo", bar: "bar"}
Run Code Online (Sandbox Code Playgroud)
执行块后.
不使用上面的语法,最好使用对象文字语法来定义对象.
var config = {
foo: 'foo',
bar: 'bar
};
Run Code Online (Sandbox Code Playgroud)
与代码相同
var a = {}; {a.b = 'b'};
Run Code Online (Sandbox Code Playgroud)
这相当于
var a = {};
a.b = 'b';
Run Code Online (Sandbox Code Playgroud)
并且可以写成
var a = {
b: 'b';
};
Run Code Online (Sandbox Code Playgroud)
来自MDN Docs
阿块语句(或复合语句在其他语言)用于组零个或多个声明.该块由一对花括号分隔.
{ a.b = 'b'; }throws Uncaught SyntaxError:意外的令牌.
如果a未声明变量,则会抛出错误.