JavaScript/ECMAScript 数组是否"sparse" Node.js?



我的问题与Javascript数组稀疏吗?有一个区别...

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

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

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

你看到的不是一个实际的数组,只是一个表示。 控制台检查是否存在 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进行现场演示。

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

最新更新