摘要:所以,當(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
摘要:復(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 ...
摘要:原型鏈和對(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)的老鳥都不一定能完全說清...
摘要:棧區(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...
摘要:示例構(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中新增)為啥沒...
摘要:在幾天前發(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....
閱讀 1083·2021-11-16 11:45
閱讀 2731·2021-09-27 13:59
閱讀 1327·2021-08-31 09:38
閱讀 3158·2019-08-30 15:52
閱讀 1323·2019-08-29 13:46
閱讀 2095·2019-08-29 11:23
閱讀 1654·2019-08-26 13:47
閱讀 2502·2019-08-26 11:54