首頁 web前端 js教程 總結4種如何判斷js數組類型的方式

總結4種如何判斷js數組類型的方式

Jul 18, 2017 am 11:42 AM
javascript 陣列 類型

js判斷數組類型的方法

方法一之instanceof

##instance ,故名思義,實例,例子,所以instanceof 用來判斷一個變數是否某個物件的實例,是一個三目運算式---和typeof最實質上的區別

a instanceof b? alert("true"):alert("false")  //注意b值是你想要判斷的那種資料型,不是一個字串,例如Array

舉個栗子:


var a=[];
console.log(a instanceof Array) //返回true
登入後複製

方法二之constructor

在W3C定義中的定義:constructor 屬性傳回建立此物件的陣列函數的參考

就是傳回物件相對應的建構子。從定義上來說跟instanceof不太一致,但效果都是一樣的

如: (a instanceof Array)   //a是否Array的實例? true or false

   (a.constructor == Array)  // a實例所對應的建構子是否為Array? true or false

#舉個栗子:



#

function employee(name,job,born){
 this.name=name;
 this.job=job;
 this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}
登入後複製

那麼判斷各種類型的方法就是:


#

console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);
登入後複製

較嚴謹且通用的方法:


function isArray(object){
 return object && typeof object==='object' &&
   Array == object.constructor;
}
登入後複製

! !注意:

使用instaceof和construcor,被判斷的array必須是在目前頁面上宣告的!例如,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明了一個array,並將其賦值給父頁面的一個變量,這時判斷該變量,Array == object.constructor;會回傳false;


原因:


1、array屬於引用型數據,在傳遞過程中,僅僅是引用位址的傳遞。

2、每個頁面的Array原生物件所引用的位址是不一樣的,在子頁面宣告的array,所對應的建構函數,是子頁面的Array物件;父頁來進行判斷,使用的Array不等於子頁面的Array;切記,不然很難追蹤問題!

方法三之特性判斷法

#以上方法都有一定的缺陷,但要相信人民大眾的智慧是無所不能及的,我們可根據數組的一些特性來判斷其類型



#

function isArray(object){
 return object && typeof object==='object' && 
   typeof object.length==='number' && 
   typeof object.splice==='function' && 
    //判断length属性是否是可枚举的 对于数组 将得到false 
   !(object.propertyIsEnumerable('length'));
}
登入後複製

有length和splice並不一定是數組,因為可以為物件添加屬性,不能列舉length屬性,才是最重要的判斷因子。

ps: 在這裡普及下propertyIsEnumerable 方法:

object. propertyIsEnumerable(proName)

#判斷指定的屬性是否可列舉

備註:如果proName 存在於object 中且可以使用一個For…In 迴圈窮舉出來,那麼propertyIsEnumerable 屬性傳回true。如果 object 不具有所指定的屬性或所指定的屬性不是可列舉的,那麼 propertyIsEnumerable 屬性會傳回 false。

propertyIsEnumerable 屬性不考慮原型鏈中的物件。

範例:


var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));
登入後複製

方法四之最簡單的方法


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

以上是總結4種如何判斷js數組類型的方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? 如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? Apr 27, 2024 am 11:33 AM

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素?

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

PHP 陣列鍵值翻轉:不同方法的效能比較分析

PHP數組多維排序實戰:從簡單到複雜場景 PHP數組多維排序實戰:從簡單到複雜場景 Apr 29, 2024 pm 09:12 PM

PHP數組多維排序實戰:從簡單到複雜場景

PHP數組深度複製的藝術:使用不同方法完美複製 PHP數組深度複製的藝術:使用不同方法完美複製 May 01, 2024 pm 12:30 PM

PHP數組深度複製的藝術:使用不同方法完美複製

PHP 數組分組函數在資料整理的應用 PHP 數組分組函數在資料整理的應用 May 04, 2024 pm 01:03 PM

PHP 數組分組函數在資料整理的應用

深度複製PHP數組的最佳實踐:探索高效的方法 深度複製PHP數組的最佳實踐:探索高效的方法 Apr 30, 2024 pm 03:42 PM

深度複製PHP數組的最佳實踐:探索高效的方法

PHP 陣列分組函數在尋找重複元素中的作用 PHP 陣列分組函數在尋找重複元素中的作用 May 05, 2024 am 09:21 AM

PHP 陣列分組函數在尋找重複元素中的作用

PHP 數組合併去重演算法:平行的解決方案 PHP 數組合併去重演算法:平行的解決方案 Apr 18, 2024 pm 02:30 PM

PHP 數組合併去重演算法:平行的解決方案

See all articles