密切相关的问题:
我有以下代码示例:
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不是我的主要语言),不可能做其他你希望能用数组做的事情(例如迭代)使用for
循环),为什么还要使用这两种语法呢?在C#中,您可以执行以下操作:
// A C# dictionary is basically an associative array
Dictionary<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#中这种语法显然是必要的(键肯定是不是1>}的属性),但为什么JavaScript有这个(假设它们完全等价)?我错过了什么,或者这实际上是多余的?
答案 0 :(得分:2)
为什么JavaScript允许数组语法访问属性?
这不是“数组语法”。
方括号是访问对象属性的标准方法。
数组只是一种对象。
方括号表示法比点符号具有访问属性的一些优点:
它也更冗长,效率可能更低。
关联数组和JavaScript对象之间的实际区别至少是模糊的,这就是JavaScript在“引擎盖下”实现对象属性的方式
JavaScript没有名为“关联数组”的功能。 (W3Schools不是值得信赖的来源)。
它有对象,它们(属于它们的核心)属性集合:值对。 (这与PHP的关联数组功能类似)。
它有数组,它是继承自Array构造函数的对象,获得类似forEach
的方法和length
等属性(使用getter函数根据具有名称的属性确定其值)这是最高的整数值。)