JavaScript配列のいくつかの奇妙な行為

4338 ワード

今日はJavaScriptの配列を復習しました.その後、彼のいくつかの素晴らしい行為をまとめました.ここでshareと一緒にします.もし間違ったところがあれば、ご指摘ください.
奇抜な1:Aray()コンストラクタ関数はnewキーワードを使わずに呼び出すことができます.
Aray()コンストラクタは配列の要素として彼に渡すパラメータを使用して、配列を作成します.一般的に、私たちは以下のように呼ばれています.
var a = new Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"]
 
ただし、newを省略してもいいです.
var a = Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"]
彼の内部実現メカニズムは分かりませんが、彼のコンストラクター関数は次のように定義されているかもしれません.
function Array(args) {
    //  ,this  Array     ,
    //      new   ,         
    if( !this instanceof Array) {
        return new Array(args);
    }

    //             
    //...
}
 
変花2:一つのパラメータだけを構造関数に伝える時、行動は予測できません.
パラメータが一つしか渡されない場合、このパラメータは整数であり、配列が得られ、lengthはこのパラメータに等しいです.
var a = new Array(12);
console.log(a.length); //12
console.log(a); //[]
 
浮動小数点が一つだけ伝わったら、エラーが発生します.
var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…)

文字列を渡すと正常に動作し、配列の最初の要素として文字列が使用されます.
var a = new Array("1.1");
console.log(a.length); //
console.log(a); //["1.1"]
 
しかし、二義性を避けるためには、字面量をそのまま使って配列を作成するのが良いと思います.
var a = []; //   
var a = [1, 1, "bom"]; //    
var a = [12]; //    ,     12
 
  3: length ( )
のように、 は に2のlengthを100に えました.しかも に しました.
var a = [1, 2, 3, 4];
console.log(a.length); //4
a.length = 100; 
console.log(a.length); //100
length 100, , a[4]-a[99] , , , 0 a.length , undefined。
var a = [1, 2, 3, 4];
a.length = 100;
console.log(a[10]); //undefined
console.log(99 in a); //false
var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100
, a[99] , , undefined 。 a[4] a[98] , :
var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(99 in a); //true;
console.log(98 in a); //false
console.log(a.length); //100