成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript-從toString方法在判斷復(fù)雜數(shù)據(jù)類型上的妙用,引申到對(duì)原型鏈的理解

sean / 1554人閱讀

摘要:所以,當(dāng)我們使用時(shí),不能進(jìn)行復(fù)雜數(shù)據(jù)類型的判斷,因?yàn)樗{(diào)用的是,雖然也繼承自,但在上重寫了,而我們通過實(shí)際上是通過原型鏈調(diào)用了。

關(guān)于 toString 方法在有關(guān)js的開發(fā)中使用應(yīng)該是相當(dāng)廣泛的,這兩天在看jQuery的源碼,從 toString 本身了解與鞏固了不少知識(shí),寫出來與大家一同分享。
首先先上一段代碼:

var arr=[1,2,3];
toString.call(arr);

來看一下效果:

眾所周知,判斷數(shù)據(jù)類型,我們大多會(huì)使用typeof操作符,但是typeof操作符只能判斷基本數(shù)據(jù)類型,對(duì)于復(fù)雜的數(shù)據(jù)類型一律返回object,而使用toString方法在這里可以做一個(gè)很好的補(bǔ)充。

問:為什么要使用toString.call(arr),而不能直接使用arr.toString() ?
再上一段代碼:

var arr=[1,2,3];
toString.call(arr);
arr.toString();

來看一下效果:

很明顯直接使用toString,得不到我們想要的效果,博主第一次看到這個(gè)結(jié)果時(shí)也是一臉懵逼。

其實(shí),這里面就涉及到js原型及原型鏈的相關(guān)知識(shí)
再上一段代碼:

var arr=[1,2,3];
Object.prototype.toString.call(arr);
Array.prototype.toString.call(arr);

來看一下效果:

看到這里大家都應(yīng)該明白了,其實(shí)只有Object.prototype上的toString才能用來進(jìn)行復(fù)雜數(shù)據(jù)類型的判斷。

簡單解釋一些原型鏈的概念:
我們都知道js中的對(duì)象都繼承自Object,所以當(dāng)我們?cè)谀硞€(gè)對(duì)象上調(diào)用一個(gè)方法時(shí),會(huì)先在該對(duì)象上進(jìn)行查找,如果沒找到則會(huì)進(jìn)入對(duì)象的原型(也就是.prototype)進(jìn)行查找,如果沒找到,同樣的也會(huì)進(jìn)入對(duì)象原型的原型進(jìn)行查找,直到找到或者進(jìn)入原型鏈的頂端Object.prototype才會(huì)停止。

所以,當(dāng)我們使用arr.toString()時(shí),不能進(jìn)行復(fù)雜數(shù)據(jù)類型的判斷,因?yàn)樗{(diào)用的是Array.prototype.toString,雖然Array也繼承自Object,但js在Array.prototype上重寫了toString,而我們通過toString.call(arr)實(shí)際上是通過原型鏈調(diào)用了Object.prototype.toString。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80266.html

相關(guān)文章

  • JavaScript類型判斷

    摘要:復(fù)雜類型復(fù)雜類型從字面量是直接生成構(gòu)造函數(shù)的,所以不會(huì)像基本類型一樣兩種情況。 JS(ES6)中的基本數(shù)據(jù)類型:1.數(shù)值型(Number):包括整數(shù)、浮點(diǎn)數(shù)、2.布爾型(Boolean)、3.字符串型(String)、4.數(shù)組(Array)、5.空值(Null) 、6.未定義(Undefined),基本數(shù)據(jù)類型是按值訪問的,因?yàn)榭梢灾苯硬僮鞅4嬖谧兞恐械膶?shí)際值。引用類型:Object ...

    Pink 評(píng)論0 收藏0
  • JS基礎(chǔ)-原型、原型鏈真的不能一知半解

    摘要:原型鏈和對(duì)象的原型是對(duì)象實(shí)例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對(duì)象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)新對(duì)象,自動(dòng)將的原型指向構(gòu)造函數(shù)的對(duì)象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥都不一定能完全說清...

    changfeng1050 評(píng)論0 收藏0
  • 基礎(chǔ)回顧-javascript數(shù)據(jù)類型

    摘要:棧區(qū)由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。屬性返回對(duì)創(chuàng)建此對(duì)象的構(gòu)造函數(shù)的引用。所有的和都是宿主對(duì)象參考高級(jí)程序設(shè)計(jì)堆和棧的概念和區(qū)別全面解析中的數(shù)據(jù)類型與類型轉(zhuǎn)換 數(shù)據(jù)類型 數(shù)據(jù)類型劃分 javascript中定義了6中基本數(shù)據(jù)類型(原始值類型),和一種復(fù)雜數(shù)據(jù)類型(引用類型),所謂復(fù)雜類型,其本質(zhì)是由無序的名值對(duì)(key:val...

    codergarden 評(píng)論0 收藏0
  • JavaScript 基本功--面試寶典

    摘要:示例構(gòu)造函數(shù)繼承實(shí)例對(duì)象其次,我們還可以使用中的新語法等關(guān)鍵字來實(shí)現(xiàn)繼承。對(duì)象的屬性是該對(duì)象的構(gòu)造函數(shù)的屬性?;谏线厴?gòu)造函數(shù)繼承代碼作用域與命名空間如果了解的用法,那么就應(yīng)該只要有塊級(jí)作用域和函數(shù)作用域。 JavaScript數(shù)據(jù)類型 JavaScript中有哪些基本數(shù)據(jù)類型 undefined、null、number、string、boolean、symbol(es6中新增)為啥沒...

    Coly 評(píng)論0 收藏0
  • 探索 Redux4.0 版本迭代 論基礎(chǔ)談?wù)雇▽?duì)比 React context)

    摘要:在幾天前發(fā)布了新版本,被合入。但是在版本迭代的背后很多有趣的設(shè)計(jì)值得了解。參數(shù)處理這項(xiàng)改動(dòng)由提出。對(duì)透明化處理中的,達(dá)到將包裹起來的目的。對(duì)的凍結(jié)認(rèn)為,在中使用和方法是一種反模式。尤其是這樣的新,某些開發(fā)者認(rèn)為將逐漸取代。 showImg(https://segmentfault.com/img/remote/1460000014571148); Redux 在幾天前(2018.04....

    xialong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<