変数が配列かオブジェクトかどうかを判断しますか?

8925 ワード

方法1:変数の種類を判断し、変数のlength属性(例外としてargmentsオブジェクトがある場合を除き、関数にパラメータを送るとデータが格納される場所)
      var arr=[2,3,4];
      var obj={"name":"maomao","age":20};
      console.log(typeof arr);   //object
      console.log(typeof obj);   //object

      console.log(arr.length);   //3
      console.log(obj.length);   //undefined
      console.log(obj.name);     //maomao
      //           length  ,      。
方法2:toString法を用いてオブジェクトを他の種類のstringに変換し、この例ではargmentsオブジェクトが配列ではなく、オブジェクトであることがよく証明されている.
        var arr=[2,3,4];
        var obj={"name":"maomao","age":20};
        // console.log(arr.toString());  //'2,3,4'
        // console.log(obj.toString());  //[object Object]


        function sum(a,b){
           // console.log(arguments);
           // console.log(typeof arguments);    //object
           // console.log(arguments.length);    //2               
           // console.log(arguments.toString()); //[object Arguments]
           return a+b;
        }
        alert(sum(3,4));
方法3:->実行不可能なinstance ofは、オブジェクトが特定のクラスの一例であるかどうかを指摘する.結論:instance ofは、オブジェクトAが別のオブジェクトBの例であるかどうかを検出する原理は、オブジェクトBのprototypeが指すオブジェクトがオブジェクトAの[prototype]チェーン上にあるかを確認することである.もしいるなら、trueに戻り、いないならfalseに戻ります.ただし、オブジェクトBのプロトタイプがnullである場合はエラーが発生します.
        var arr=[2,3,4,"haa"];
        var obj={"name":"maomao","age":20};
        console.log(arr instanceof Array);  //true
        console.log(obj instanceof Object);  //true

        console.log(arr instanceof Object);  //true
        ---        ,        
        console.log(obj instanceof Array);  //false
4、ECMAScript 5ではisArayで判断できます.
        var arr=[2,3,4,"haa"];
        var obj={"name":"maomao","age":20};
        console.log(Array.isArray(arr));  //true
        console.log(Array.isArray(obj));  //false
        //    isObject         
5、isProttypeOf()関数原理を使用して、オブジェクトがArayのプロトタイプであるかどうかを検出する(またはプロトタイプチェーン内にあるかを検出することができ、直接の親オブジェクトだけでなく、プロトタイプチェーン上のすべての親オブジェクトを検出することもできます)使用方法:parent.isProttypeOf(child)を検出して、parentがchildのプロトタイプであるかどうかを検出します.なお、isPrototypeOf()関数で実現される機能は、instancof演算子と非常に類似しています.
    var arr=[2,3,4,"haa"];
    var object={"name":"maomao","age":20};
    console.log(Array.prototype.isPrototypeOf(arr));    //true
    console.log(Array.prototype.isPrototypeOf(object)); //false
    console.log(Object.prototype.isPrototypeOf(arr));   //true                   console.log(Object.prototype.isPrototypeOf(object));  //true
   //     Array.prototype.isPrototypeOf()         
6、constructorの属性を使う
var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr.constructor);  //function Array() { [native code] }
console.log(obj.constructor);  //function Object() { [native code] }
console.log(arr.constructor==Array);   //true
console.log(arr.constructor==Object);  //false
console.log(obj.constructor==Array);   //false
console.log(obj.constructor==Object);  //true
7、concat方法を使用します.フレキシブルなアレー、array.co ncat(配列1、配列2、…)は新しい配列を返します.この新しい配列は2つ以上の配列からなります.
var arr=[2,3,4];
var obj={"name":"maomao","age":20,'concat':function(){ return 1;}};
console.log(arr.concat());  //[2,3,4]
console.log(obj.concat());  //1     concat          ,          。           Uncaught TypeError: obj.concat is not a function