JavaScript对象属性查找-语法重要吗?

JavaScript对象属性查找-语法重要吗?,javascript,syntax,properties,ecma262,Javascript,Syntax,Properties,Ecma262,这是关于JavaScript(ECMAScript)语言的一个基本问题,因此如果它是重复的,我提前表示歉意(稍微搜索一下并没有发现我的确切问题) 在ECMAScript中,我们可以使用两种基本语法形式来获取/设置对象的属性,它们似乎具有完全相同的效果。因为我不太清楚,所以我将它们称为“属性”和“关联数组”符号: var o = {}; // Property notation. o.foo = 'Foo'; // (set) o.foo; // => "Foo" (get) // Asso

这是关于JavaScript(ECMAScript)语言的一个基本问题,因此如果它是重复的,我提前表示歉意(稍微搜索一下并没有发现我的确切问题)

在ECMAScript中,我们可以使用两种基本语法形式来获取/设置对象的属性,它们似乎具有完全相同的效果。因为我不太清楚,所以我将它们称为“属性”和“关联数组”符号:

var o = {};
// Property notation.
o.foo = 'Foo'; // (set)
o.foo; // => "Foo" (get)
// Associative array notation.
o['bar'] = 'Bar'; // (set)
o['bar']; // => "Bar" (get)
// They seem to be interchangeable.
o['foo']; // => "Foo"
o.bar; // => "Bar"

这两种符号之间有什么真正的区别吗?显然,关联数组表示法允许我们在对象上查找动态生成的键(并强制将其参数转换为字符串),而属性表示法使用文本,但这是唯一的区别吗?

您是正确的;它们是相同的。

只是补充一点,“关联数组”表示法还允许您使用非正确变量名的属性名,如
obj[“this&that”]
。是的,而且当您不想将变量用作键时,您必须坚持使用数组表示法
object[myVar]
另一个区别:当[]语法允许任何名称时,点语法要求属性名称为有效标识符(例如,不应以数字开头等)。