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

3543 ワード

編集
方法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));
webフロントエンドJavaScript学習グループ:618522268方法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
//上から見るとAray.prototype.isProttypeOf()が判断の根拠となります.
6、constructorの属性を使う
var arr=[2,3,4]「haa」var obj={「name」:「maomao」,「age」:20}.consolie.log(arr.com nstructor)//function Aray(){native code}consosolie.log(obj.com nstructor)//function Object(){native code}consolone.log(arr.com nstructor==Aray)//true consone.log(arr.com nstructor==Object);falseconsone.logs(obj.com nstructor==Aray);falseconsone.logs(obj.com nstructor==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;}consolie.log(arr.co ncat)//[2,3,4]consolie.log(obj.co ncat)/.1もちろんこのconcatは私が自分で決めた方法です.戻り値もカスタマイズできます.この方法がないとUncaght TypeErr:obj.co ncas is not a functionというエラーが発生します.webフロントエンドJavaScript学習群618522268