这个数据结构是什么,显示为列表,但具有键值对?

时间:2015-10-23 14:20:50

标签: javascript node.js data-structures

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

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

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

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

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

(对不起,如果这是一个骗局,无法在谷歌中找到它。)

2 个答案:

答案 0 :(得分:4)

它是一个数组,但具有其他属性。可以从the specification for exec解释带有正则表达式的示例 - 请参阅步骤13和15,例如创建数组的位置,然后添加index属性:

  
      
  1. 设A是一个新的数组,就像表达式new Array()一样,其中Array是具有该名称的标准内置构造函数。
  2.   
  3. 让matchIndex为i。
  4.   
  5. 使用参数" index",属性描述符{[[Value]]:matchIndex,[[Writable]:true,[[Enumerable]]:调用A的[[DefineOwnProperty]]内部方法:true ,[[Configurable]]:true},and true。
  6.   

(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

答案 1 :(得分:1)

在JavaScript中,所有非基元的东西都是对象。

数组也是JavaScript中的对象。它们具有特殊的功能和属性,使它们表现为集合,但对象的所有规则仍然适用于它们。