我的问题与Javascript数组稀疏吗?有一个区别...
JavaScript 数组是否像 Node.js(和/或 V8)中实现的那样稀疏? 我假设是,但后来我做了以下测试:
var testArray = [];
testArray[10000] = 'test';
console.log(testArray);
返回的是 10,000 个空白元素,末尾带有"test"。 这是因为调试输出的工作方式,还是 Node.js 在添加新元素时实际上为未定义的数组元素分配内存?
你看到的不是一个实际的数组,只是一个表示。 控制台检查是否存在 length
和 splice
属性,并打印对象的数值属性,这就是 jQuery 集合在记录时显示为数组的原因。
function RandomThingThatIsDefinitelyNotAnArray() {
this.splice = function() {};
this.length = 10;
this[5] = 5;
}
console.log(new RandomThingThatIsDefinitelyNotAnArray());
// shows [undefined, undefined, undefined, undefined, undefined, 5]
jsfFiddle进行现场演示。
Node的util.inspect 函数专门检查稀疏数组以像这样打印它们。事实上,它有一个专门检查它的测试。我知道这一点,因为我对节点检查器的完全重写最终没有进入核心,并导致了我的UltraREPL的出现。