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