我在几个节点示例中已经看过几次,但我不知道该怎么做。一个例子是net.Socket
。从数据侦听器发出警告后,这是一个套接字。
> commands._events.data
[ [Function], warned: true ];
另一个例子是使用/^(some)(regex)$/.exec("someregex")
[ 'someregex',
'some',
'regex',
index: 0,
input: 'someregex' ]
我不确定我理解这个数据结构是什么。它是列表还是字典?为什么它有索引,还有键值对?我可以match.index
,也可以match[1]
。它是如何构建的?
(对不起,如果这是一个骗局,无法在谷歌中找到它。)
答案 0 :(得分:4)
它是一个数组,但具有其他属性。可以从the specification for exec
解释带有正则表达式的示例 - 请参阅步骤13和15,例如创建数组的位置,然后添加index
属性:
- 设A是一个新的数组,就像表达式new Array()一样,其中Array是具有该名称的标准内置构造函数。
- 让matchIndex为i。
- 使用参数" index",属性描述符{[[Value]]:matchIndex,[[Writable]:true,[[Enumerable]]:调用A的[[DefineOwnProperty]]内部方法:true ,[[Configurable]]:true},and 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
答案 1 :(得分:1)
在JavaScript中,所有非基元的东西都是对象。
数组也是JavaScript中的对象。它们具有特殊的功能和属性,使它们表现为集合,但对象的所有规则仍然适用于它们。