1

この質問でのランス・ポラードのコメントに触発されて、本当に奇妙なことが起こりました。

var strangeArray = {
    0:"a",
    1:"b",
    2:"c",
    length: 0,
    splice: Array.prototype.splice
}

これを実行すると、次のようになります。

> strangeArray;
  []    <-- you get an empty array.

> strangeArray.length;
  0     <-- Holy $#!T

そしていま:

> strangeArray[0];
  "a"

> strangeArray[1];
  "b"

> strangeArray[2];
  "c"

何?「配列内の非表示の値」?

最初は物だからと思ったのですが、それが理由です。しかし、object次のように表示する必要があります。

{}

では、なぜこれが起こっているのですか?助けてください、私は完全に混乱しています。ありがとう。

4

3 に答える 3

4

これは、コンソールがオブジェクトを配列として解釈することが多い方法です(コードのように、配列でなくても)。

コンソールが次のオブジェクトを認識したとき...

  • 数値.lengthプロパティ
  • 関数.spliceプロパティ

...コンソールは、そうでない場合でも、配列として表示することを決定します。オブジェクトが実際に何であるかには影響しません。

strangeArray.length; // 0

これは当然のことです。オブジェクトで定義しました。

彼らがこのアプローチを使用する理由は、おそらくそれが高速で十分に正確だからです。

繰り返しになりますが、が表示されているからといって[]、それが配列であるとは限りません。コンソールは言語の一部ではありません。いくつかの有用な情報を表示するだけの役割があります。

于 2012-05-26T02:46:28.920 に答える
3

strangeArray.length == 0明示的strangeArray.lengthに整数0に設定し、デフォルト値をオーバーライドするためです。

配列にはまだ要素が含まれています。

for (var i in strangeArray) {
  console.log(i);
}

出力:

0
1
2
length
splice
于 2012-05-26T02:46:15.080 に答える
0

すべてが JavaScript のオブジェクトです。詳細な説明については、次の質問に対する回答を参照してください:
Javascript のほとんどすべてがオブジェクトである理由は?

それを考えると、コミュニティ wiki の回答は残りの説明を提供します。strangeArray通常はオブジェクトに関連付けられているオブジェクトのプロパティを指定するためarray、コンソールをだましてそのように表示させます。

于 2012-05-26T02:56:36.653 に答える