为什么JavaScript允许数组语法访问属性?

时间:2017-02-28 16:23:12

标签: javascript arrays object

密切相关的问题:

我有以下代码示例:

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#中这种语法显然是必要的(键肯定是不是}的属性),但为什么JavaScript有这个(假设它们完全等价)?我错过了什么,或者这实际上是多余的?

1 个答案:

答案 0 :(得分:2)

  

为什么JavaScript允许数组语法访问属性?

这不是“数组语法”。

方括号是访问对象属性的标准方法。

数组只是一种对象。

方括号表示法比点符号具有访问属性的一些优点:

  • 您可以使用任何表达式来定义名称,包括变量和函数调用。
  • 您可以访问名称在标识符中无效的属性(例如以数字开头的属性,这就是您常常看到用于访问数组的原因)。

它也更冗长,效率可能更低。

  

关联数组和JavaScript对象之间的实际区别至少是模糊的,这就是JavaScript在“引擎盖下”实现对象属性的方式

JavaScript没有名为“关联数组”的功能。 (W3Schools不是值得信赖的来源)。

它有对象,它们(属于它们的核心)属性集合:值对。 (这与PHP的关联数组功能类似)。

它有数组,它是继承自Array构造函数的对象,获得类似forEach的方法和length等属性(使用getter函数根据具有名称的属性确定其值)这是最高的整数值。)

相关问题