1. 程式人生 > >Js中如何判斷一個物件為陣列型別

Js中如何判斷一個物件為陣列型別

在說明如何判斷一個物件為陣列型別前,我們先鞏固下js的資料型別,js一共有六大資料型別:number、string、object、Boolean、null、undefined。

string: 由單引號或雙引號來說明,如"string";
number:陣列型別,比如整數、小數等;
Boolean: 有兩個值:true、false;
undefined:未定義,就是你建立一個變數後卻沒給它賦值;
null: 顧名思義,null就是沒有,什麼也不表示;
object: 除了上面五種之外的型別。
      js的陣列是無型別的:陣列元素可以是任意型別,並且同一個陣列中的不同元素也可能有不同的型別。陣列的元素可以是物件或其他陣列,這樣就可以建立複雜的資料結構。通常我們可以用一元運算子typeof來判斷js的資料型別,但是對於陣列這樣一個特殊的物件卻只能返回"object"。
    typeof可以解決大部分的資料型別判斷,是一個一元運算,放在一個運算值之前,其返回值為一個字串,該字串說明運算數的型別,所以判斷某個是否為String型別,可以直接 if(typeof(你的值) == "string"){}。
    接下來看一些例子:
var str="string";
    console.log(str); //string
 
    var num=1;
    console.log(num); //number
 
    var bn=false;
    console.log(bn); //boolean
 
    var a;
    console.log(typeof a); //undfined
 
    var obj = null;
    console.log(typeof obj); //object
 
    var doc = document;
    console.log(typeof doc);//object
 
    var arr = [];
    console.log(arr); //object
 
    var fn = function(){};
    console.log(typeof fn); //function   除了可以判斷資料型別還可以判斷function型別
      除了前四個型別外,null、物件、陣列返回的都是object型別;對於函式型別返回的則是function,再比如typeof(Date),typeof(eval)等。接下來進入正題,js判斷陣列型別的方法。

方法一: instanceof

      instanceof 用於判斷一個變數是否某個物件的例項,左邊運算元是一個物件,右邊運算元是一個函式物件或者函式構造器。原理是通過判斷左運算元的物件的原型鏈上是否具有右運算元的建構函式的prototype屬性。
a instanceof b?alert("true"):alert("false")  //注意b值是你想要判斷的那種資料型別,不是一個字串,比如Array。
舉一個例子:
var arr=[];
console.log(arr instanceof Array) //返回true 
方法二之 constructor

     在W3C定義中的定義:constructor 屬性返回對建立此物件的陣列函式的引用,就是返回物件相對應的建構函式。從定義上來說跟instanceof不太一致,但效果都是一樣的。

那麼判斷各種型別的方法:

console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);
注意:
      使用instaceof和construcor,被判斷的array必須是在當前頁面宣告的!比如,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明瞭一個array,並將其賦值給父頁面的一個變數,這時判斷該變數,Array ==object.constructor;會返回false;
原因:
1、array屬於引用型資料,在傳遞過程中,僅僅是引用地址的傳遞。
2、每個頁面的Array原生物件所引用的地址是不一樣的,在子頁面宣告的array,所對應的建構函式,是子頁面的Array物件;父頁面來進行判斷,使用的Array並不等於子頁面的Array。
方法三 最簡單的方法   Object.prototype.toString.call(arr) === “[object Array]”


function isArray(o) {
    return Object.prototype.toString.call(o) === ‘[object Array]‘;
}


原文:https://blog.csdn.net/u010297791/article/details/55049619