JavaScript对象 - [] vs dot

Nie*_* B. 2 javascript

这两项任务之间有什么区别(如果有的话):

var foo = {};
foo['bar'] = "some value";
foo.baz = "some other value";

console.log(foo.bar)
=> "some value"
console.log(foo.baz)
=> "some other value"
Run Code Online (Sandbox Code Playgroud)

他们是同义词吗?我注意到你可以使用[]语法添加不是有效属性名称的键.

foo['a space'] = "does not work";
console.log(foo.a space);
=> SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)

我的理由是我为伪命名空间编写了一个小JS库.它的编写假设上述赋值是相同的(忽略使用[]语法时允许的超集)

小智 7

foo["bar"]相当于foo.bar,虽然foo.bar在我看来更容易阅读.正如您已经注意到的那样,前一种语法(foo["bar"])允许您使用不是有效标识符的属性名称.它还允许您使用动态属性名称:

var name = "bar";

foo[name] = 1;

console.log(foo["bar"]);
Run Code Online (Sandbox Code Playgroud)

将输出1.