1. 程式人生 > >js判斷是否為陣列的方法小結

js判斷是否為陣列的方法小結

一.判斷是否為陣列的方法

1. typeof

首先我們會想到的是使用typeof來檢測資料型別,但是對於Function, String, Number, Undefined等這幾種基本型別來說,使用typeof來檢測都可以檢測到,比如程式碼如下:

function test(){}
console.log(typeof1);// number
console.log(typeof test);// function 
console.log(typeof"yunxi");// string
console.log(typeofundefined);// undefined

但是對於陣列或者正則來說,使用typeof來檢測的話,那就滿足不了,因為當我們檢測陣列或者正則的話,那麼返回的型別將會是一個物件object,如下程式碼所示:

console.log(typeof[]);// object
console.log(typeof/\d+/g);// object

2. Instanceof

由此我們很容易會想到使用instanceof來檢測某個物件是否是陣列的例項,該檢測會返回一個布林型(boolean),如果是陣列的話,返回true,否則的話返回false;我們再來看下上面的檢測是否為陣列的程式碼如下:

console.log([]instanceofArray);// true
console.log(/\d+/g instanceofArray);// false

如上可以看到使用instanceof確實可以判斷是否為陣列的列子;

3. constructor屬性

在javascript中,每個物件都有一個constructor屬性,它引用了初始化該物件的建構函式,比如判斷未知物件的型別,因此我們可以如下寫一個方法,程式碼如下:

function isArray(obj){returntypeof obj =='object'&& obj.constructor ==Array}// 測試demo
console.log(isArray([]));// truevar a ={"a":1};
console.log(isArray(a));// falsevar b =[1,2,3];
console.log(isArray(b));// true
console
.log(isArray(/\d+/g));// false

如上可以看到,通過呼叫isArray 方法也可以判斷是否為陣列的列子。

我們現在可以看到,對於第二點和第三點分別使用instanceof方法和constructor屬性貌似都可以來判斷是否為陣列了,但是也有列外情況,比如在跨框架iframe的時候使用頁面中的陣列時,會失敗,因為在不同的框架iframe中,建立的陣列是不會相互共享其prototype屬性的;如下程式碼測試即可得到驗證~

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;var arr =new xArray("1","2","3","4","5");//這個寫法IE下是不支援的,標準瀏覽器firefox,chrome下有

console.log(arr);// 打印出 ["1", "2", "3", "4", "5"]
console.log(arr instanceofArray);// false 
console.log(arr.constructor ===Array);// false

如上的方法我們都不能來判斷一個物件是否為陣列的方式; 但是我們在看ECMA262中可以看到,可以使用 Object.prototype.toString.call()方法來判斷一個物件是否為陣列;如下程式碼:

function isArray(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
}
// 程式碼呼叫
console.log(isArray([]));  // true
console.log(isArray([1,2,3])); // true

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;       
var arr = new xArray("1","2","3","4","5");

console.log(arr); // ["1","2","3","4","5"]
console.log(isArray(arr));  // true       

4.Array.isArray()

ECMAScript5Array.isArray()正式引入JavaScript,目的就是準確地檢測一個值是否為陣列。IE9+Firefox 4+Safari 5+Opera 10.5+Chrome都實現了這個方法。但是在IE8之前的版本是不支援的。

5.綜合以上,判斷是否為陣列的最好寫法如下:

var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true

相關推薦

js判斷是否陣列方法小結

一.判斷是否為陣列的方法1. typeof首先我們會想到的是使用typeof來檢測資料型別,但是對於Function, String, Number, Undefined等這幾種基本型別來說,使用typeof來檢測都可以檢測到,比如程式碼如下:function test(){

js 判斷變數陣列方法

      js的陣列是無型別的:陣列元素可以是任意型別,並且同一個陣列中的不同元素也可能有不同的型別。陣列的元素可以是物件或其他陣列,這樣就可以建立複雜的資料結構。通常我們可以用一元運算子typeof來判斷js的資料型別,但是對於陣列這樣一個特殊的物件卻只能返回"object"。

js判斷是否是陣列方法

1.instanceof var arr = [1,2,3]; arr instanceof Array 要注意,instanceof Array 只適用於與陣列初始化在相同上下文中才有效,且不能跨iframe 2.Array.isArray() Array.isArr

JS判斷是否中文的方法

第一種程式碼: EXFCODE: function isChinese(temp) { var re=/[^/u4e00-/u9fa5]/; if (re.test(temp)) r

js判斷是否是陣列的四種方法

<div>1</div> <div>2</div> <div>3</div> var arr = [1, 2, 3]; //類陣

判斷是否陣列方法

var toString = Object.prototype.toString; var isArray = Array.isArray || function(val) { return

js判斷是否ie瀏覽器

win active spa nbsp 兼容性問題 else -s ont 非ie   之前在開發時遇到瀏覽器的兼容性問題,涉及到對ie瀏覽器的判斷。現在此做個筆記。   這裏我以函數的形式來判斷,在用的時候直接調用即可。   var isIE = !!window.A

JS 判斷是否IP格式

fun doc ava col for $1 als regex rip <html> <head> <title><a href=‘http://js.zz5u.net‘><u>JavaScript<

js判斷是否移動端

agent || isa san navigator mac os 移動 roi 是否 var u = navigator.userAgent;var isAndroid = u.indexOf(‘Android‘) > -1 || u.indexOf(‘Adr‘)

js判斷null

define script 代碼 clas 否則 scrip 程序員 引號 好的 今天在做項目的時候,犯了一個著實不應該的錯誤,拿到data為null,然後判斷如果為null執行A,否則執行B 我錯誤的代碼是 if(data===null){ A; }else{

JS判斷變數型別的方法總結

typeof操作符 用於檢測基本資料型別,返回值可能為: “number” “boolean” “string” “undefined” “object” “function”. 注意:typeof null返回”obje

js判斷是否Trident核心瀏覽器(IE等)函式

//判斷是否為Trident核心瀏覽器(IE等)函式 browserIsIe: function () { if (!!window.ActiveXObject || "ActiveXObject" in window) { return true; }

JS判斷是否

1. JS程式碼 function isEmpty(obj){ if(typeof obj == "undefined" || obj == null || obj == ""){ return false; //為空的時候返回的就是false

最短JS判斷是否IE6(IE的寫法)

常用的 JavaScript 檢測瀏覽器為 IE 是哪個版本的程式碼,包括是否是最人極端厭惡的 ie6 識別與檢測。 var isIE=!!window.ActiveXObject; var isIE6=isIE&&!window.XMLHttpReques

js判斷是否微信瀏覽器【程式碼】

<html> <head> <title>測試</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head&

js判斷是否物件

var obj = {}; 1、toString(推薦) Object.prototype.toString.call(obj) === '[Object Object]' 2、construct

js判斷是否數字

var regNumber = /^{[0-9]}*$/; var numberFlag = installmentNumber.search(regNumber) == -1; numberFlag結果為true, installmentNumber為非數字 number

js判斷是否整數型別(5種方式)

方式一、使用取餘運算子判斷 任何整數都會被1整除,即餘數是0。利用這個規則來判斷是否是整數。 function isInteger(obj) { return obj%1 === 0 } isInteger(3) // true isInteger(

JS判斷是否微信瀏覽器

JS判斷瀏覽器是否為微信瀏覽器 function isWeiXin() { <span style="white-space:pre"> </span>var ua = win

js String物件中常用方法小結(字串操作)

1、charCodeAt方法返回一個整數,代表指定位置字元的Unicode編碼。 strObj.charCodeAt(index) 說明: index將被處理字元的從零開始計數的編號。有效值為0到字串長度減1的數字。 如果指定位置沒有字元,將返回NaN。 例如: var s