4

我的问题与JavaScript 数组是否稀疏?有一个区别...

JavaScript 数组是否像 Node.js(和/或 V8)中实现的那样稀疏?我以为是,但后来我做了以下测试:

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

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

4

2 回答 2

5

你看到的不是一个实际的数组,只是一个表示。控制台检查是否存在 alength和 asplice属性并打印对象的数字属性,这就是为什么 jQuery 集合在记录时看起来是数组的原因。

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

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

jsfFiddle进行现场演示。

于 2012-04-21T00:28:22.477 回答
2

Node 的 util.inspect 函数专门检查稀疏数组以像这样打印它们。事实上,它有一个专门检查它的测试。我知道这一点是因为我对节点检查器的完全重写最终没有进入核心,并导致我的UltraREPL

于 2012-04-21T05:12:09.723 回答