29

このブログエントリに基づいていくつかの小さな実験を行っています。

私は Google Chrome のデバッガーでこの調査を行っていますが、ここが難しい部分です。

何じゃこりゃ?!

ローカル変数を削除できないという事実がわかりました (それらはオブジェクト属性ではないため)。「引数」と呼ばれる配列から関数に渡されたすべてのパラメーターを「読み取る」ことができることがわかりました。配列の要素を削除することはできずarray[0]、未定義の値を持つことしかできません。

undefined x 1誰かが埋め込まれた画像の意味を説明できますか?

そして、関数を上書きしてfooを返すとarguments[0]、通常の「通常の」未定義が得られます。

undefined x 1これは単なる実験ですが、興味深いようです。何を指すか知っている人はいますか?

4

5 に答える 5

39

これは、初期化されていないインデックスを配列 (および配列のようなオブジェクト)で表示する Chrome の新しい方法のようです。

> Array(100)
[undefined × 100]

これは確かに印刷よりも優れています[undefined, undefined, undefined,...]が、以前はそうでした.

undefinedただし、値が 1 つしかない場合は、 x 1.

于 2012-05-21T10:46:40.280 に答える
2

Google Chrome は、この表記法を使用してスパース配列を表示することを選択しているようです。スパース配列でないかどうかundefined x nが表示されます。[undefined, undefined]

var arr = new Array(2);
console.log(arr);

var arr2 = [];
arr2[3] = 123;
console.log(arr2);

var arr3 = [,,,];
console.log(arr3)

var arr4 = [,];
console.log(arr4)

var arr5 = [undefined, undefined]
console.log(arr5)

var arr6 = [undefined]
console.log(arr6)

arr1 から arr4 はすべてスパース配列ですが、arr5 と arr6 はそうではありません。Chrome では次のように表示されます。

[undefined × 2] 
[undefined × 3, 123] 
[undefined × 3] 
[undefined × 1] 
[undefined, undefined] 
[undefined] 

[undefined x 1]スパース配列の に注意してください。

要素を削除したため、配列から要素を削除すると、配列は疎になります。

于 2012-10-07T07:38:03.860 に答える
0

それは私にも起こりました。同じものを別のブラウザーで開き、配列をコンソールに出力/ログします。Chrome と Firefox の両方で同じように機能する限り (出力に undefinedx1 が含まれていても要素へのアクセスが正常に機能するため)、内部で何かを更新しない Chrome のある種のバグと考えます。実際に次の方法でテストできます。

  1. 要素を配列に追加し、 console.log() を起動して要素をログに記録し、未定義かどうかを確認していました。それらはすべて定義されていました。

  2. push() の後、配列をログに記録しましたが、これが発生したとき、Chrome では常に最後の未定義 x 1 であったようです。

  3. その後、何度もログに記録しようとしましたが、結果は同じでした。

  4. ただし、(出力のために)要素にインデックスでアクセスすると、適切な値が返されました(面白い)。

  5. その後、配列を再度ログに記録したところ、最後のインデックスは未定義 x 1 であることがわかりました (直接アクセスして成功したものです!)。

  6. 次に、配列で for ループを実行し、各要素をログに記録するか、使用して、すべて正常に表示されました。

  7. 次に、アレイに別のログを記録しますが、まだバグがあります。

    私が最初に使用していたコードには未定義のチェックがあり、それらは起動しませんでしたが、コンソールにこれらすべての未定義が表示されていて、私を悩ませていました (しゃれた意図はありません)。

また読む価値があります: Array.push のみを使用する場合、配列内の変数を初期化しますか? 私は自分のコードでも pop() を使用していますが、コンソール ログが実際には別の状態 (コードが「停止」している場合) を表しているのは合理的な説明です。

于 2012-07-30T22:22:45.063 に答える