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()
ECMAScript5將Array.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