这个数据结构是以列表forms出现的,但是具有键值对?

我已经在几个节点的例子中看过几次,但是我从来不知道该怎么做。 一个例子是一个net.Socket 。 数据侦听器发出警告后,这是一个套接字。

 > commands._events.data [ [Function], warned: true ]; 

另一个例子是使用/^(some)(regex)$/.exec("someregex")

 [ 'someregex', 'some', 'regex', index: 0, input: 'someregex' ] 

我不确定我明白这个数据结构是什么。 这是一个列表还是一本字典? 为什么它有索引,还有键值对? 我可以做match.index ,但也match[1] 。 它是如何构build的?

(对不起,如果这是一个愚蠢的,无法在谷歌find它)。

       

网上收集的解决方案 "这个数据结构是以列表forms出现的,但是具有键值对?"

这是一个数组,但具有其他属性。 具有正则expression式的例子可以从exec的规范中解释 – 参见步骤13和15,例如创build一个数组,然后添加index属性:

  1. 设A是一个新创build的数组,如同通过expression式new Array()一样,其中Array是具有该名称的标准内置构造函数。
  2. 让matchIndex为i。
  3. 使用参数“index”,属性描述符{[[Value]]:matchIndex,[[Writable]:true,[[Enumerable]]:true,[[Configurable]]:true调用A的[[DefineOwnProperty]]内部方法}和true。

(A是最终的回报价值)

你也可以做到的:

 var x = [1, 2, 3]; x['abc'] = 5; console.log(x); //[1, 2, 3, abc: 5] console.log(x.length); //3 console.log(x[1]); //2 console.log(x.abc); //5 

在JavaScript中,所有不是原语的东西都是一个对象。

数组也是JavaScript中的对象。 他们有特殊的function和属性,使他们performance为一个集合,但所有的对象的规则仍然适用于他们。