摘要:對象構造函數的判斷用法的每個實例都有構造函數,用于保存著用于創建當前對象的函數如上所示,的實例的跟對象是相等的那么我們就可以用此來判斷數組了原型鏈上的用法屬性表示構造函數的原型其中有一個方法是用于測試一個對象是否存在于另一個對象的原型鏈上。
在JS中,數組是屬于Object類型的,也就是屬于引用類型(引用類型存放在堆內存中,在棧內存會有一個或者多個地址來指向這個堆內存)。
所以對于引用類型,我們不能typeof來判斷具體的類型,因為返回的都是‘object’。
接下來,我將介紹六種判斷方法,并且對這六種方法進行逐一解析
① instanceof 操作符判斷用法:arr instanceof Array
instanceof 主要是用來判斷某個實例是否屬于某個對象
function obj(){} let o1 = new obj(); console.log(o1 instanceof obj); // true
那么我們用instanceof 來判斷數組的方法如下:
let arr = []; console.log(arr instanceof Array); // true
但是?instanceof?會有一個問題,它的問題在于假定只有一個全局執行的環境。如果網頁中包含多個框架,那實際上就存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的Array構造函數。如果你從一個框架向另一個框架傳入一個數組,那么傳入的數組與在第二個框架中原生創建的數組分別具有不同的構造函數。②對象構造函數的 constructor判斷
用法:arr.constructor === Array
Object的每個實例都有構造函數 constructor,用于保存著用于創建當前對象的函數
function obj(){} let o1 = new obj(); console.log(o1.constructor === obj); // true
如上所示,obj 的實例 o1 的 constructor 跟 obj 對象是相等的
那么我們就可以用此來判斷數組了
let arr = []; console.log(arr.constructor === Array); // true③Array?原型鏈上的 isPrototypeOf
用法:Array.prototype.isPrototypeOf(arr)
Array.prototype ?屬性表示 Array 構造函數的原型
其中有一個方法是 isPrototypeOf() 用于測試一個對象是否存在于另一個對象的原型鏈上。
let arr = []; console.log(Array.prototype.isPrototypeOf(arr)); // true④Object.getPrototypeOf
用法:Object.getPrototypeOf(arr) === Array.prototype
Object.getPrototypeOf() 方法返回指定對象的原型
所以只要跟Array的原型比較即可
let arr = []; console.log(Object.getPrototypeOf(arr) === Array.prototype); // true⑤Object.prototype.toString
用法:Object.prototype.toString.call(arr) === "[object Array]"
雖然Array也繼承自Object,但js在Array.prototype上重寫了toString,而我們通過toString.call(arr)實際上是通過原型鏈調用了。
let arr = []; console.log(Object.prototype.toString.call(arr) === "[object Array]"); // true⑥Array.isArray
用法:Array.isArray(arr)
ES5中新增了Array.isArray方法,IE8及以下不支持
Array.isArray ( arg )
isArray 函數需要一個參數 arg,如果參數是個對象并且 class 內部屬性是 "Array", 返回布爾值 true;否則它返回 false。采用如下步驟:
? ? ? ? ?? 如果 Type(arg) 不是 Object, 返回 false。
? ? ? ? ? ?如果 arg 的 [[Class]] 內部屬性值是 "Array", 則返回 true。
? ? ? ? ? ?返回 false.
let arr = []; console.log(Array.isArray(arr)); // true
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100773.html
摘要:區別對象和數組的六種方法方法一利用方法通過調用方法試著將該變量轉化為代表其類型的。該方法對于真正的可行參數對象轉化為時返回會轉化失敗此外,對于含有數字長度屬性的類也會轉化失敗。 區別對象和數組的六種方法(1)方法一:利用toString方法通過調用toString( )方法試著將該變量轉化為代表其類型的string。該方法對于真正的array可行;參數對象轉化為string時返回[ob...
摘要:數組去重第一種方法先對數組進行排序,排好序,然后把數組的當前項和后一項進行比較,相同則使用數組的相同的位置,,但是為了防止數組塌陷,每次刪除數組元素的時候要把的值減一。 數組去重 第一種方法: 先對數組進行排序sort(),排好序,然后把數組的當前項和后一項進行比較,相同則使用數組的splice(相同的位置,1),但是為了防止數組塌陷,每次刪除數組元素的時候要把i的值減一。 ...
摘要:數據類型數據類型指的就是字面量類型在中一共有六種數據類型字符串數值布爾值空值未定義對象其中屬于基本數據類型而屬于引用數據類型字符串在中使用字符串需要使用引號括起來使用雙引號或單引號都可以不能混合使用引號不能嵌套數值型在中所有數值類型都 ?? ? ? ???????????????????? ???????數據類型 數據類型指的就是字面量類型 在JS中一共有六種數據類型 ...
摘要:原始類型數組,循環變量不能以數字開頭,因為如果這樣編譯器則無法區別數字和變量。可以直接修改數組的值如就變成了輸出為循環和判斷 Part1 原始類型,數組,循環 Variables 變量不能以數字開頭,因為如果這樣編譯器則無法區別數字和變量。 養成好習慣每句話后面加分號 Primitive data types 包括Number,String, Boolean, Undefined...
摘要:對象構造函數讀入的兩個參數與在中也有明確的規范,用以保證構造函數的簡單性。 承接第三篇末尾內容,本篇結合官方 API 進入對 Zepto 核心的分析,開始難度會比較大,需要重點理解幾個核心對象的關系,方能找到線索。 $() 與 Z 對象創建 Zepto Core API 的首個方法 $() 按照其官方解釋: Create a Zepto collection object by pe...
閱讀 3205·2021-11-08 13:21
閱讀 1195·2021-08-12 13:28
閱讀 1406·2019-08-30 14:23
閱讀 1924·2019-08-30 11:09
閱讀 840·2019-08-29 13:22
閱讀 2684·2019-08-29 13:12
閱讀 2548·2019-08-26 17:04
閱讀 2250·2019-08-26 13:22