javascript中对象和关联数组之间有什么区别?

时间:2011-11-16 02:55:12

标签: javascript object associative-array

令人困惑的讨论

In this question,有一个关于javaScript中关联数组和对象概念的讨论,我有点困惑。

在此示例代码中:

var check = {
  pattern : {
    name: /^[a-zA-Z-\s]{1,20}$/,
    email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
    pass: /.{6,40}/,
    url:  /^[(-)\w&:\/\.=\?,#+]{1,}$/,
    aml:  /<(.+)_([a-z]){1}>$/
    }
};

以下讨论让我感到困惑:

  

@ steven.yang外部对象不是样本中的关联数组,但这就是要求的内容

     

@sissonb你的意思是'外部对象不是一个关联数组'?我认为关联数组在javascript中表示为对象。区别在于表示法 - 通过foo.barfoo[bar]

     

@ steven.yang关联数组意味着key =&gt;值。 http://en.wikipedia.org/wiki/Associative_array你的内部对象有一个模式键,包含这个关联数组的对象没有键。

我对JS中的关联数组和对象的理解

关联数组是defined as键值对,在JavaScript中表示为object

分配给check的外部对象具有键pattern和另一个对象的值。内部对象具有nameemail ...的键以及正则表达式对象的相应值。

两个对象都可以算作关联数组吗?

5 个答案:

答案 0 :(得分:6)

不是真的,这就是原因:

var arr = new Array();
arr["foo"] = 100;
arr["bar"] = 200;
console.log(arr.length); // Prints 0.

向关联数组添加元素应该增加其长度(IMO)。

由于语法糖,它看起来和行为(有点)像一个关联数组。然而,似乎是&#34;数组条目&#34;是(仅)对象属性。

答案 1 :(得分:5)

如果将“关联数组”定义为将信息存储为键值对集合的数据结构,则是,JavaScript对象是关联数组。

然而,短语“associative array”通常不在JavaScript的上下文中使用,而是我们说“object”。我建议坚持使用标准的JS术语来避免误解。

请注意,JS也有(非关联)arrays,其元素通过数字索引访问。这些 也是对象,因此允许非数字键属性,但这通常被认为是不好的做法。

答案 2 :(得分:3)

JavaScript中没有关联数组。一切都是对象。

当然它们是相似的,但JavaScript中的关联数组只是对象。

答案 3 :(得分:2)

Associative Array

  

在计算机科学中,关联数组(也称为地图或字典)是由(键,值)对的集合组成的抽象数据类型,这样每个可能的键在集合中最多出现一次。 / p>

据我所知,JavaScript中的对象符合该定义。

当然没有唯一的“关联数组”对象,它与任何其他普通对象有任何不同。因此,如果您想要关联数组功能,请使用javascript对象。

然而以下是一个常见的错误信息

  

JavaScript中没有关联数组

你应该忽略这些人,也许试着说服他们说错了。

答案 4 :(得分:0)

我的回复来晚了,但是我希望这可以帮助人们理解这种差异。我在阅读这篇文章,并且没有令人满意的关联数组定义。 JavaScript没有关联数组。这些只是为了方便起见可以将其视为关联数组的对象。在对象中,将值存储为命名属性,这与其他编程语言中的关联数组非常相似。这就是为什么您可以像访问关联数组一样访问属性,但是可以使用与对象关联的方法。您可以测试创建一个对象并尝试使用关联数组可以做的所有事情,但是您不能完成数组的所有方法。