4

私の質問は、 Javascript配列がまばらですか?と同じです。1つの違いがあります...

Node.js(および/またはV8)で実装されているように、JavaScript配列はまばらですか?私はそうだと思っていましたが、次のテストを行いました。

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

返されるのは10,000個の空白要素で、最後に「test」が付いています。これは、デバッグ出力の動作方法が原因ですか、それともNode.jsは、新しい要素を追加するときに、未定義の配列要素に実際にメモリを割り当てますか?

4

2 に答える 2

5

表示されているのは実際の配列ではなく、単なる表現です。コンソールはalengthとプロパティの存在を確認し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 。

于 2012-04-21T00:28:22.477 に答える
2

ノードのutil.inspect関数は、スパース配列を具体的にチェックして、そのように出力します。実際、それを具体的にチェックするテストがあります。これを知っているのは、ノードのインスペクターを完全に書き直しても、最終的にはコアにならず、UltraREPLにつながるからです。

于 2012-04-21T05:12:09.723 に答える