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.bar
或foo[bar]
@ steven.yang关联数组意味着key =&gt;值。 http://en.wikipedia.org/wiki/Associative_array你的内部对象有一个模式键,包含这个关联数组的对象没有键。
关联数组是defined as键值对,在JavaScript中表示为object
。
分配给check
的外部对象具有键pattern
和另一个对象的值。内部对象具有name
,email
...的键以及正则表达式对象的相应值。
两个对象都可以算作关联数组吗?
答案 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)
在计算机科学中,关联数组(也称为地图或字典)是由(键,值)对的集合组成的抽象数据类型,这样每个可能的键在集合中最多出现一次。 / p>
据我所知,JavaScript中的对象符合该定义。
当然没有唯一的“关联数组”对象,它与任何其他普通对象有任何不同。因此,如果您想要关联数组功能,请使用javascript对象。
然而以下是一个常见的错误信息
JavaScript中没有关联数组
你应该忽略这些人,也许试着说服他们说错了。
答案 4 :(得分:0)
我的回复来晚了,但是我希望这可以帮助人们理解这种差异。我在阅读这篇文章,并且没有令人满意的关联数组定义。 JavaScript没有关联数组。这些只是为了方便起见可以将其视为关联数组的对象。在对象中,将值存储为命名属性,这与其他编程语言中的关联数组非常相似。这就是为什么您可以像访问关联数组一样访问属性,但是可以使用与对象关联的方法。您可以测试创建一个对象并尝试使用关联数组可以做的所有事情,但是您不能完成数组的所有方法。