Node.js中的JavaScript / ECMAScript数组是否“稀疏”?

时间:2012-04-21 00:06:05

标签: javascript arrays node.js sparse-array

我的问题与Are Javascript arrays sparse?相同,但有一点不同......

JavaScript数组是否稀疏,在Node.js(和/或V8)中实现?我曾经假设过那些,但后来我做了以下测试:

var testArray = [];
testArray[10000] = 'test';
console.log(testArray);

返回的是10,000个空白元素,最后是'test'。这是因为调试输出的工作方式,还是Node.js在添加新元素时实际为未定义的数组元素分配内存?

2 个答案:

答案 0 :(得分:5)

您所看到的不是实际数组,只是一种表示。控制台检查是否存在lengthsplice属性,并打印对象的数字属性,这就是jQuery集合在记录时显示为数组的原因。

function RandomThingThatIsDefinitelyNotAnArray() {
    this.splice = function() {};
    this.length = 10;
    this[5] = 5;
}

console.log(new RandomThingThatIsDefinitelyNotAnArray());​
// shows [undefined, undefined, undefined, undefined, undefined, 5]

jsfFiddle进行现场演示。

答案 1 :(得分:2)

Node的util.inspect函数专门检查稀疏数组,以便像那样打印它们。事实上,它有a test that specifically checks for it。我知道这一点,因为我对节点检查员的完全重写最终没有成为核心,并导致我的UltraREPL