This question already has answers here: JavaScript property access: dot notation vs. brackets? (13个回答) 3年前关闭。 密切相关的问题:associative array versus object in javascriptWhy does JavaScript not throw an exception for this code sample?javascript array associative AND indexed?我有以下代码示例:var someVariable = {abc: "def", ghi: "jkl"}someVariable["SomeProperty"] = "dfsdfadsd"alert(someVariable["SomeProperty"])var someOtherVariable = { abcd: "defsd", ghij: "dfsdfdss" }someOtherVariable.SomeOtherProperty = "adfsdfsd"alert(someOtherVariable.SomeOtherProperty);alert(someOtherVariable["SomeOtherProperty"])它们全部按照它们的外观运行-将属性附加到各自的对象。 alert在每种情况下均显示期望的字符串。从相关问题中我的理解是,两者之间在功能上没有区别。我还在W3Schools的JavaScript arrays tutorial中遇到以下语句: 许多编程语言都支持带有命名索引的数组。 具有命名索引的数组称为关联数组(或哈希)。 JavaScript不支持带有命名索引的数组。 在JavaScript中,数组始终使用编号索引。如果是这样,为什么在这里完全允许使用数组语法? (再次,从相关问题中我的理解是,关联数组和JavaScript对象之间的实际区别至少是稍微模糊的,这就是JavaScript在“幕后”实现对象属性的方式)。据我所知(如果我不正确,因为JavaScript不是我的主要语言,请纠正我),不可能做其他您希望能够对数组进行的操作(例如,用循环),那么为什么要同时使用这两种语法?在C#中,您可以执行以下操作:// A C# dictionary is basically an associative arrayDictionary<string, int> dict = new Dictionary<string, int>();// Fill dictionary ...foreach (string key in dict.Keys) { int value = dict[key]; // Do something with the value}但是我不知道使用JavaScript属性执行类似操作的方法。在C#中显然有必要使用这种语法(键绝对不是for的属性),但是JavaScript为什么具有此功能(假设它们完全等效)?我是否缺少某些东西,或者这实际上是完全多余的吗? 最佳答案 为什么JavaScript允许数组语法访问属性?它不是“数组语法”。方括号是访问对象属性的标准方法。数组只是一种对象。方括号表示法与点表示法相比,在访问属性方面具有一些优势:您可以使用任何表达式来定义名称,包括变量和函数调用。您可以访问名称在标识符中无效的属性(例如,以数字开头的属性,这就是为什么您通常会看到它们用于访问数组的原因)。它也更冗长,效率可能更低。 关联数组和JavaScript对象之间的实际区别至少是稍微模糊的,这就是JavaScript在“幕后”实现对象属性的方式JavaScript没有称为“关联数组”的功能。 (W3Schools不是可信赖的来源)。它具有一些对象,这些对象是(它们的核心)property:value对的集合。 (这类似于PHP的关联数组功能)。它具有数组,这些数组是从Array构造函数继承的对象,获得诸如forEach之类的方法和诸如length之类的属性(该方法使用getter函数根据名称为最大整数值的属性来确定其值) 。关于javascript - 为什么JavaScript允许数组语法访问属性? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42513889/