1. typeof真的那麼厲害嗎??
//首先看**var ary = [1,23,4];
console.log(typeof ary); //輸出結果是object
上面的辦法並不能實時的檢測出是否是陣列,只能判斷其型別,所以說typeof判斷基本型別資料還是挺好的,但是不能準確測試出是否是陣列(typeof的具體用法以後提及,現在回歸正題)
2.instanceof 判斷
var ary = [1,23,4];console.log(ary instanceof array)//true;
從輸出的效果來看,還是挺令人滿意的,能準確的檢測出資料型別是否是陣列,不要高興的太早,大家先想想這個的缺點,我們接著說第三種方法
3.原型鏈方法
var ary = [1,23,4];console.log(ary.__proto__.constructor==array);//true
console.log(ary.constructor==array)//true 這兩段**是一樣的
這個辦法開起來好高大上哦~~,利用了原型鏈的方法,但是但是,這個是有相容的哦,在ie早期版本裡面__proto__是沒有定義的哦~而且,這個仍然有侷限性,我們現在就來總結一下第2種方法和第3種方法侷限性
總結一下第2種方法和第3種方法侷限性
instanceof 和constructor 判斷的變數,必須在當前頁面宣告的,比如,乙個頁面(父頁面)有乙個框架,框架中引用了乙個頁面(子頁面),在子頁面中宣告了乙個ary,並將其賦值給父頁面的乙個變數,這時判斷該變數,array == object.constructor;會返回false;
原因:
1、array屬於引用型資料,在傳遞過程中,僅僅是引用位址的傳遞。
2、每個頁面的array原生物件所引用的位址是不一樣的,在子頁面宣告的array,所對應的建構函式,是子頁面的array物件;父頁面來進行判斷,使用的array並不等於子頁面的array;切記,不然很難跟蹤問題!
4.通用的方法
var ary = [1,23,4];function isarray(o)
console.log(isarray(ary));
js判斷變數的型別為陣列型別
js的陣列是無型別的 陣列元素可以是任意型別,並且同乙個陣列中的不同元素也可能有不同的型別。陣列的元素可以是物件或其他陣列,這樣就可以建立複雜的資料結構。通常我們可以用一元運算子typeof來判斷js的資料型別,但是對於陣列這樣乙個特殊的物件卻只能返回 object typeof可以解決大部分的資料...
js判斷變數型別是否為陣列
判斷變數的型別是最經常使用的方法,但是判斷的方式有很多。1.typeof var ary 1,2,3,4 console.log typeof ary 輸出 object 很明顯,typeof只能檢測基本資料型別,並不能檢測出來是否為陣列。2.instanceof var ary 1,2,3,4 c...
js判斷變數型別是否為陣列
判斷變數的型別是最經常使用的方法,但是判斷的方式有很多。1.typeof var ary 1,2,3,4 console.log typeof ary 輸出 object 很明顯,typeof只能檢測基本資料型別,並不能檢測出來是否為陣列。2.instanceof var ary 1,2,3,4 c...