-1

誰かが私にこのコードのブロックと「arr」のタイプを説明してもらえますか?配列がオブジェクトであることは知っていますが

  1. [[Class]]がオブジェクトのように動作するのに、なぜ配列として表示されるのですか?
  2. arr.lengthは3を返します。どうやって?

    var arr = [0, 1, 3];
    arr.name = "asdf";
    
    console.log(arr[1] + " " + arr.name + " " + arr.length); 
    // Returns-> 1 asdf 3
    
    Object.prototype.toString.call(arr); 
    // Returns-> "[object Array]"
    

ここでの取引は何ですか?


これは、このSO投稿ですでに詳細に回答されています

Javascript配列はプリミティブですか?文字列?オブジェクト?

4

4 に答える 4

0

1については、セクション15.4.5「配列インスタンスのプロパティ」を参照してください。

配列インスタンスは配列プロトタイプオブジェクトからプロパティを継承し、その[[Class]]内部プロパティ値は「配列」です。配列インスタンスには、次のプロパティもあります。

2については、セクション15.4.5.2「長さ」を参照してください。

このArrayオブジェクトのlengthプロパティは、名前が配列インデックスであるすべての削除可能なプロパティの名前よりも常に数値が大きいデータプロパティです。

于 2013-01-16T16:54:55.597 に答える
0

var arr = [0, 1, 3]の単なる構文糖衣ですvar arr = Array.new(0, 1, 3)。これは同じことであるためarrArrayであり、のインスタンスArrayはオブジェクトです。

var arr = [0, 1, 3];
typeof arr;  // returns "object"
arr instanceof Array;  // returns true

Array関数をオーバーライドしてlenght()、配列内の要素の数のみをカウントします。をarr. name = "asdf"設定すると、この特定のオブジェクトにプロパティが設定されますが、関数ではカウントされませんlength()

于 2013-01-16T16:50:28.517 に答える
0

JavaScript配列は特殊なオブジェクトであるため、配列とオブジェクトの両方です。したがって、他のオブジェクトと同じようにプロパティを追加できます。プロパティには数値プロパティのみが考慮されるため、のlengthような任意のプロパティを追加してnameも影響はありません。

于 2013-01-16T16:50:50.950 に答える
0

すべてのjavascript変数はオブジェクトです。このようないくつかのオブジェクトも配列です。

したがって、プロパティを設定し(オブジェクトであるため)、配列に固有のプロパティを確認することもできます(配列であるため)。

于 2013-01-16T16:51:51.620 に答える