我的问题与Are Javascript arrays sparse?相同,但有一点不同......
JavaScript数组是否稀疏,在Node.js(和/或V8)中实现?我曾经假设过那些,但后来我做了以下测试:
var testArray = [];
testArray[10000] = 'test';
console.log(testArray);
返回的是10,000个空白元素,最后是'test'。这是因为调试输出的工作方式,还是Node.js在添加新元素时实际为未定义的数组元素分配内存?
答案 0 :(得分:5)
您所看到的不是实际数组,只是一种表示。控制台检查是否存在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进行现场演示。
答案 1 :(得分:2)
Node的util.inspect函数专门检查稀疏数组,以便像那样打印它们。事实上,它有a test that specifically checks for it。我知道这一点,因为我对节点检查员的完全重写最终没有成为核心,并导致我的UltraREPL。