對(duì)象轉(zhuǎn)換為原始值的實(shí)現(xiàn)方法
首先,我們要明白原始值得概念
原始值
存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段,也就是說(shuō),它們的值直接存儲(chǔ)在變量訪問(wèn)的位置。
引用值
存儲(chǔ)在堆(heap)中的對(duì)象,也就是說(shuō),存儲(chǔ)在變量處的值是一個(gè)指針(point),指向存儲(chǔ)對(duì)象的內(nèi)存處
————引用了w3c里的概念
原始值,簡(jiǎn)單點(diǎn)理解就是 null undefined string number Boolean 這些
對(duì)象轉(zhuǎn)換為boolean相對(duì)簡(jiǎn)單
所有的對(duì)象(包括數(shù)組和函數(shù))都轉(zhuǎn)換成true,包裝對(duì)象從也是對(duì)象,也轉(zhuǎn)換為true
書上是這么說(shuō)的 “存取字符串,數(shù)字和布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象稱之為包裝對(duì)象”,我是這么理解的,new出來(lái)的string啊,number啊,boolean啊都算作包裝對(duì)象,他有別于對(duì)象,但它確實(shí)是個(gè)對(duì)象,最主要的區(qū)別就是不能給包裝對(duì)象定義新的屬性,因?yàn)閟tring number Boolean的屬性是只讀的。
對(duì)象轉(zhuǎn)換為string類型
如果 對(duì)象具有toString()方法,就調(diào)用toString()的方法,如果返回一個(gè)原始值,就把這個(gè)原始值轉(zhuǎn)換成字符串,對(duì)象就轉(zhuǎn)換成這個(gè)字符串,如果不具有toString()方法或者這個(gè)方法返回的值不是一個(gè)原始值,那么就調(diào)用valueOf()方法,同樣的套路,如果返回的是一個(gè)原始值,就把這個(gè)原始值轉(zhuǎn)換成字符串,那么對(duì)象也就轉(zhuǎn)換成了這個(gè)字符串了,如果返回的不是一個(gè)原始值,就拋出一個(gè)類型轉(zhuǎn)換的錯(cuò)誤。
這里的toString()方法和valueOf()方法就不一一贅述了,
對(duì)象轉(zhuǎn)換為number類型
相比較轉(zhuǎn)換成string,轉(zhuǎn)換number的過(guò)程,正好的與其相反,先調(diào)用valueOf()方法,再調(diào)用toString()方法,最后toString()方法返回的不是一個(gè)原始值是,js就拋出一個(gè)錯(cuò)誤。
當(dāng)使用"=="和"+"運(yùn)算符進(jìn)行數(shù)字的計(jì)算或者字符串的拼接時(shí),如果運(yùn)算符的一側(cè)是對(duì)象,將使用特殊的對(duì)象轉(zhuǎn)換為原始值的方法。對(duì)于非日期對(duì)象,對(duì)象轉(zhuǎn)換成原始值就是
對(duì)象先調(diào)用valueOf()方法,再調(diào)用tostring()方法,并將通過(guò)調(diào)用這兩個(gè)方法得到的原始值直接作為對(duì)象轉(zhuǎn)換成的原始值,對(duì)于日期對(duì)象來(lái)說(shuō),先調(diào)用toString()方法,再調(diào)用valueOf方法。
對(duì)于日期對(duì)象轉(zhuǎn)換成原始值,舉個(gè)例子吧
var now=new Date(); typeOf(now+1); //"string" 將日期對(duì)象轉(zhuǎn)換成了字符串,因?yàn)橄日{(diào)用的是toString()方法 typeOf(now-1); //"number" 體現(xiàn)了js的靈活性,"-"將字符串轉(zhuǎn)換線成了number
以上這篇對(duì)象轉(zhuǎn)換為原始值的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
javascript函數(shù)命名的三種方式及區(qū)別介紹
下面小編就為大家?guī)?lái)一篇javascript函數(shù)命名的三種方式及區(qū)別介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-03-03淺談javascript中關(guān)于日期和時(shí)間的基礎(chǔ)知識(shí)
下面小編就為大家?guī)?lái)一篇淺談javascript中關(guān)于日期和時(shí)間的基礎(chǔ)知識(shí)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07在JavaScript中處理字符串之fontcolor()方法的使用
這篇文章主要介紹了在JavaScript中處理字符串之fontcolor()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06Javascript實(shí)現(xiàn)的SHA-256加密算法完整實(shí)例
這篇文章主要介紹了Javascript實(shí)現(xiàn)的SHA-256加密算法,以完整實(shí)例形式分析了JavaScript實(shí)現(xiàn)SHA-256加密的具體步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02JavaScript展開操作符(Spread operator)詳解
在本篇文章里小編給大家整理的是關(guān)于JavaScript展開操作符(Spread operator)的詳細(xì)介紹以及用法,需要的讀者們參考下。2019-07-07JavaScript學(xué)習(xí)歷程和心得小結(jié)
在過(guò)去,JavaScript只是被用來(lái)做一些簡(jiǎn)單的網(wǎng)頁(yè)效果,比如表單驗(yàn)證、浮動(dòng)廣告等,所以那時(shí)候JavaScript并沒(méi)有受到重視。2010-08-08