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

ste*_*ang 8 javascript associative-array object

令人困惑的讨论

在这个问题中,我讨论了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}>$/
    }
};
Run Code Online (Sandbox Code Playgroud)

这是讨论让我困惑:

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

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

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

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

关联数组被定义为键值对,object在JavaScript中表示.

分配给的外部对象check具有键pattern和另一个对象的值.内对象具有的键name,email...和正则表达式对象的相应的值.

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

Dav*_*ton 6

不是真的,这就是原因:

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

将元素添加到关联数组应该增加其长度(IMO).

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

  • 维基百科文章没有提到大小或长度 (2认同)
  • @ steven.yang我觉得我有*更多*困惑;) (2认同)

nnn*_*nnn 5

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

但是,短语"关联数组"通常不在JavaScript的上下文中使用,而是我们说" 对象 ".我建议坚持使用标准JS术语以避免误解.

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