在說明如何判斷乙個物件為陣列型別前,我們先鞏固下js的資料型別,js一共有六大資料型別:number、string、object、boolean、null、undefined。
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)
---------------------
原文:
js判斷乙個物件為陣列的方法
陣列物件js的陣列是無型別的 陣列元素可以是任意型別,並且同乙個陣列中的不同元素也可能有不同的型別。陣列的元素可以是物件或其他陣列,這樣就可以建立複雜的資料結構。通常我們可以用一元運算子typeof來判斷js的資料型別,但是對於陣列這樣乙個特殊的物件卻只能返回 object typeof 1,2,3...
如何判斷乙個JS物件是否為空
1 使用json把物件變為json字串,在判斷該字串的長度是否為2,或者該字串是否是 var obj1 var obj2 console.log json.stringify obj1 length 2 console.log json.stringify obj1 console.log json...
如何判斷乙個陣列和物件為空?
陣列一般用陣列的長度可以判斷 arr null arr.length 0如果是物件呢?有如下方法 1.把物件轉化為字串 json.stringify 然後通過判斷長度。let obj let res json.stringify obj console.log res 說明是空物件2.遍歷 let ...