JavaScript / ECMAScript数组在Node.js中“稀疏”吗?

我的问题是相同的JavaScript数组稀疏? 有一个区别

JavaScript数组是稀疏的, 在Node.js(和/或V8)中实现 ? 我假设了这些,但是我做了下面的testing:

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

返回的是10000个空白元素,最后是“testing”。 这是因为debugging输出的工作方式,或者是否Node.js实际上为未定义的数组元素添加新元素时分配内存?

节点的util.inspect函数专门检查稀疏数组来打印它们。 事实上,它有一个专门检查它的testing 。 我知道这一点,因为我完全重写节点的检查员最终没有把它变成核心,并导致我的UltraREPL 。

你所看到的不是一个真正的数组,而只是一个表示。 控制台检查是否存在lengthsplice属性,并打印该对象的数字属性,这就是为什么jQuery收集logging时显示为数组。

 function RandomThingThatIsDefinitelyNotAnArray() { this.splice = function() {}; this.length = 10; this[5] = 5; } console.log(new RandomThingThatIsDefinitelyNotAnArray());​ // shows [undefined, undefined, undefined, undefined, undefined, 5] 

jsfFiddle现场演示。