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