摘要:運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的屬性。多個(gè)窗口意味著多個(gè)全局環(huán)境,不同的全局環(huán)境擁有不同的全局對(duì)象,從而擁有不同的內(nèi)置類型構(gòu)造函數(shù)。
instanceof
instanceof 運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性。
語法
object instanceof constructor
描述
instanceof 運(yùn)算符用來檢測(cè) constructor.prototype 是否存在于參數(shù) object 的原型鏈上。
需要注意的是,如果表達(dá)式 obj instanceof Foo 返回true,則并不意味著該表達(dá)式會(huì)永遠(yuǎn)返回true,因?yàn)镕oo.prototype屬性的值有可能會(huì)改變,改變之后的值很有可能不存在于obj的原型鏈上,這時(shí)原表達(dá)式的值就會(huì)成為false。另外一種情況下,原表達(dá)式的值也會(huì)改變,就是改變對(duì)象obj的原型鏈的情況,雖然在目前的ES規(guī)范中,我們只能讀取對(duì)象的原型而不能改變它,但借助于非標(biāo)準(zhǔn)的__proto__魔法屬性,是可以實(shí)現(xiàn)的。比如執(zhí)行obj.__proto__ = {}之后,obj instanceof Foo就會(huì)返回false了。
String和Date對(duì)象同時(shí)也屬于Object類型
typeof
typeof操作符返回一個(gè)字符串,指示未經(jīng)計(jì)算的操作數(shù)的類型。
下表總結(jié)了 typeof 可能的返回值。有關(guān)類型和原語的更多信息,可查看 JavaScript數(shù)據(jù)結(jié)構(gòu) 頁面。
typeof和instanceof的區(qū)別
typeof和instanceof都可以用來判斷變量,它們的用法有很大區(qū)別
typeof會(huì)返回一個(gè)變量的基本類型,instanceof返回的是一個(gè)布爾值
如果我們想要判斷一個(gè)變量是否存在,可以使用typeof:(不能使用if(a) 若a未聲明,則報(bào)錯(cuò))
if(typeof a != "undefined"){ //變量存在 }
需要注意的是,instanceof只能用來判斷對(duì)象和函數(shù),不能用來判斷字符串和數(shù)字等
typeof不能用于判斷是否為數(shù)組,因?yàn)槎紩?huì)返回object,判斷是否為數(shù)組可以用一下幾個(gè)方法:
1、constructor屬性
這個(gè)屬性在我們使用js系統(tǒng)或者自己創(chuàng)建的對(duì)象的時(shí)候,會(huì)默認(rèn)的加上,例如:
var arr = [1,2,3]; //創(chuàng)建一個(gè)數(shù)組對(duì)象 arr.prototype.constructor = Array; //這一句是系統(tǒng)默認(rèn)加上的
所以我們就可以這樣來判斷:
var arr = [1,2,3,1]; arr.constructor === Array; // true
2、instanceof
instanceof是檢測(cè)對(duì)象的原型鏈?zhǔn)欠裰赶驑?gòu)造函數(shù)的prototype對(duì)象的,所以我們也可以用它來判斷:
arr instanceof Array; // true
3、Array.isArray()
Array.isArray(arr) // true
4、Object.prototype.toString.call()
instanceof是檢測(cè)對(duì)象的原型鏈?zhǔn)欠裰赶驑?gòu)造函數(shù)的prototype對(duì)象的,所以我們也可以用它來判斷:
Object.prototype.toString.call(arr) // "[object Array]"
判斷數(shù)組終極解決方案:
var arr = [1,2,3]; function isArrayFn(obj){ //封裝一個(gè)函數(shù) if (typeof Array.isArray === "function") { return Array.isArray(obj); //瀏覽器支持則使用isArray()方法 }else{ //否則使用toString方法 return Object.prototype.toString.call(obj) === "[object Array]"; } } alert(isArrayFn(arr));// true
instanceof和多全局對(duì)象(多個(gè)frame或多個(gè)window之間的交互)
在瀏覽器中,我們的腳本可能需要在多個(gè)窗口之間進(jìn)行交互。多個(gè)窗口意味著多個(gè)全局環(huán)境,不同的全局環(huán)境擁有不同的全局對(duì)象,從而擁有不同的內(nèi)置類型構(gòu)造函數(shù)。這可能會(huì)引發(fā)一些問題。比如,表達(dá)式 [] instanceof window.frames[0].Array 會(huì)返回false,因?yàn)?Array.prototype !== window.frames[0].Array.prototype,因此你必須使用 Array.isArray(myObj) 或者 Object.prototype.toString.call(myObj) === "[object Array]"來判斷myObj是否是數(shù)組。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83570.html
摘要:中和常用來判斷一個(gè)變量是否為空,或者是什么類型的。運(yùn)算符返回一個(gè)用來表示表達(dá)式的數(shù)據(jù)類型的字符串。運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的屬性。檢查原型鏈會(huì)找到同上 JavaScript 中typeof 和 instanceof 常用來判斷一個(gè)變量是否為空,或者是什么類型的。但它們之間還是有區(qū)別的: typeof typeof 是一個(gè)一元運(yùn)算,放在一個(gè)運(yùn)算數(shù)之前,運(yùn)算數(shù)...
摘要:如果左側(cè)的對(duì)象是右側(cè)類的實(shí)例,則返回而中對(duì)象的類是通過初始化它們的構(gòu)造函數(shù)來定義的。其語法是操作符用來比較兩個(gè)操作數(shù)的構(gòu)造函數(shù)。 關(guān)于typeof typeof一元運(yùn)算符,用來返回操作數(shù)類型的字符串。 typeof幾乎不可能得到它們想要的結(jié)果。typeof只有一個(gè)實(shí)際應(yīng)用場(chǎng)景,就是用來檢測(cè)一個(gè)對(duì)象是否已經(jīng)定義或者是否已經(jīng)賦值。而這個(gè)應(yīng)用卻不是來檢查對(duì)象的類型。 Value ...
摘要:類型的實(shí)例首先要理解的含義是例子的意思,實(shí)際上是判斷是否是的一個(gè)實(shí)例。 數(shù)據(jù)類型深入理解 數(shù)據(jù)類型分類 基本(值)類型(5種) String:任意字符串 Number:任意的數(shù)字 boolean:true/false null:null undefined:undefined 對(duì)象(引用)類型(3種) Object:任意對(duì)象 Array:一種特別的對(duì)象(數(shù)值下...
摘要:需要測(cè)試的函數(shù)構(gòu)造函數(shù)即用運(yùn)算符來檢測(cè)是否存在參數(shù)的原型鏈。區(qū)別只能用來判斷對(duì)象函數(shù)和數(shù)組,不能用來判斷字符串和數(shù)字等用于判斷一個(gè)表達(dá)式的原始值,返回一個(gè)字符串。一般返回結(jié)果有函數(shù)數(shù)組,對(duì)象。 最近開始在整理ES6/ES7/ES8/ES9的知識(shí)點(diǎn)(已經(jīng)上傳到 我的博客 上),碰到一些知識(shí)點(diǎn)是自己已經(jīng)忘記(用得少的知識(shí)點(diǎn)),于是也重新復(fù)習(xí)了一遍。 這篇文章要復(fù)習(xí)的 instanc...
摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實(shí)喊的都是你。當(dāng)然的嘛狗蛋買了件新衣服,小明當(dāng)然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時(shí)提到了:所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡(jiǎn)單的講解一下javascript中的數(shù)據(jù)類...
閱讀 1438·2023-04-25 16:31
閱讀 2040·2021-11-24 10:33
閱讀 2745·2021-09-23 11:33
閱讀 2528·2021-09-23 11:31
閱讀 2900·2021-09-08 09:45
閱讀 2336·2021-09-06 15:02
閱讀 2647·2019-08-30 14:21
閱讀 2313·2019-08-30 12:56