首頁 >後端開發 >PHP問題 >php怎麼判斷是陣列還是對象

php怎麼判斷是陣列還是對象

藏色散人
藏色散人原創
2021-06-21 10:25:485409瀏覽

php判斷是陣列還是物件的方法:1、透過變數的型別及變數的length屬性來判斷;2、使用toString方法將物件轉換成其他類型的string;3、透過instanceof判斷;4 、使用isArray來判斷等等。

php怎麼判斷是陣列還是對象

本文操作環境:windows7系統、PHP7.1版、Dell G3電腦。

php怎麼判斷是陣列還是物件?如何判斷變數是數組還是物件

方法一:透過判斷變數的類型,且變數的length屬性(除了有一種例外是arguments物件–當給函數傳參時資料儲存的地方)

      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属性,所以是未定义。

方法二:

使用toString方法將物件轉換成其他類型的string,此範例很好的證明了arguments物件不是數組,而是物件

  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));

方法三: —>不可行

instanceof 指出物件是否是特定類別的一個實例。

結論:instanceof 偵測一個物件A是不是另一個物件B的實例的原理是:查看物件B的prototype指向的物件是否在物件A的[[prototype]]鏈上。如果在,則傳回true,如果不在則傳回false。不過有一個特殊的情況,當物件B的prototype為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中可以使用isArray來判斷

        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、使用isPrototypeOf()函數

原理:偵測一個物件是否為Array的原型(或處於原型鏈中,不但可偵測直接父對象,還可偵測整個原型鏈上的所有父對象)

使用方法: parent.isPrototypeOf(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.concat(數組1,數組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这个错误。

推薦學習:《PHP影片教學

以上是php怎麼判斷是陣列還是對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn