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

資訊專欄INFORMATION COLUMN

簡(jiǎn)單說 JavaScript中的tostring( ) 與 valueOf( )方法

tain335 / 3325人閱讀

摘要:日期類定義的方法會(huì)返回它的一個(gè)內(nèi)部表示年月日以來(lái)的毫秒數(shù)。和應(yīng)用的對(duì)象到原始值的轉(zhuǎn)換包含日期對(duì)象的一種特殊情形。簡(jiǎn)單說與引發(fā)的思考簡(jiǎn)單說通過的隱式轉(zhuǎn)換,關(guān)鍵時(shí)刻救你一命

說明

所有的對(duì)象都繼承有toString() 和 valueOf() 方法,對(duì)象到字符串,對(duì)象到數(shù)字的轉(zhuǎn)換,會(huì)通過調(diào)用待轉(zhuǎn)換對(duì)象的這兩個(gè)方法中的一個(gè)來(lái)完成。

解釋 toString( )方法的作用是:

返回一個(gè)反映這個(gè)對(duì)象的字符串,而很多類都定義了不同版本的toString( )。

({}.toString());       //=>  "[object Object]"   
[1,2].toString();      //=>  "1,2"   
true.toString();       //=>  "true"    
new Date(1970,0,1).toString();  //=>  "Thu Jan 01 1970 00:00:00 GMT+0800 (CST)"    

Error("一個(gè)錯(cuò)誤信息").toString();    //=>  "Error: 一個(gè)錯(cuò)誤信息"    

(function (x){return x}).toString();   //=>  "function (x){return x}"     

/d/.toString();    //=>  "/d/"  或者 "/d/" 瀏覽器不同返回也可能會(huì)不同
valueOf() 方法,它的作用是:

如果對(duì)象存在任意原始值,它就默認(rèn)將對(duì)象轉(zhuǎn)換為表示它的原始值,如果對(duì)象是復(fù)合值,而且大多數(shù)對(duì)象無(wú)法真正表示為一個(gè)原始值,因此默認(rèn)的valueOf( )方法簡(jiǎn)單地返回對(duì)象本身,而不是返回一個(gè)原始值。

數(shù)組、函數(shù)、和正則表達(dá)式簡(jiǎn)單的繼承了這個(gè)默認(rèn)方法,調(diào)用這些類型的實(shí)例的valueOf( )方法只是簡(jiǎn)答返回對(duì)象本身。

日期類定義的valueOf( )方法會(huì)返回它的一個(gè)內(nèi)部表示:1970年1月1日以來(lái)的毫秒數(shù)。

[1,2].valueOf();  //=>  [1,2]  

(function (){}).valueOf();   //=>  function (){}

/d/.valueOf();    //=>  /d/  

new Date().valueOf();   //=>  1502941383029

原始值:不可變更的值,包括undefined、null、布爾值、數(shù)字、和字符串。
看下面這張圖,列出了一些基本的類型轉(zhuǎn)換,這張圖來(lái)自 JavaScript權(quán)威指南。

好了,我們現(xiàn)在已經(jīng)了解toString( )方法 和 valueOf( )方法了,下來(lái)我們來(lái)說說,對(duì)象到字符串和對(duì)象到數(shù)字的轉(zhuǎn)換。

對(duì)象到字符串的轉(zhuǎn)換:

1、如果對(duì)象具有toString( )方法,則調(diào)用這個(gè)方法。如果她返回一個(gè)原始值,JavaScript將這個(gè)值轉(zhuǎn)換為字符串(如果本身不是字符串的話),并返回這個(gè)字符串結(jié)果。
2、如果對(duì)象沒有toString( )方法,或者這個(gè)方法并不返回一個(gè)原始值,那么JavaScript會(huì)調(diào)用valueOf( )方法。如果存在這個(gè)方法,則JavaScript調(diào)用它。如果返回值是原始值,JavaScript將這個(gè)值轉(zhuǎn)換為字符串(如果本身不是字符串的話),并返回這個(gè)字符串結(jié)果。
3、否則,JavaScript無(wú)法從toString()或者valueOf( )獲得一個(gè)原始值,因此這時(shí)它將拋出一個(gè)類型錯(cuò)誤異常。

對(duì)象到數(shù)字的轉(zhuǎn)換:

1、如果對(duì)象具有valueOf( )方法,后者返回一個(gè)原始值,則JavaScript將這個(gè)原始值轉(zhuǎn)換為數(shù)字(如果需要的話)并返回這個(gè)數(shù)字。
2、否則,如果對(duì)象具有toString( )方法,后者返回一個(gè)原始值,則JavaScript將其轉(zhuǎn)化并返回。
3、否則,JavaScript拋出一個(gè)類型錯(cuò)誤異常。

所以這就解釋了,為什么空數(shù)組會(huì)被轉(zhuǎn)換為數(shù)字0,為什么具有單個(gè)元素的數(shù)組同樣會(huì)轉(zhuǎn)換成一個(gè)數(shù)字。
數(shù)組繼承了默認(rèn)的valueOf( )方法,這個(gè)方法返回一個(gè)對(duì)象而不是一個(gè)原始值,因此,數(shù)組到數(shù)字的轉(zhuǎn)換則調(diào)用toString( )方法??諗?shù)組轉(zhuǎn)換為空字符串,空字符串轉(zhuǎn)換為數(shù)字0。
含有一個(gè)元素的數(shù)組轉(zhuǎn)換為字符串的結(jié)果和這個(gè)元素轉(zhuǎn)換字符串的結(jié)果一樣。
如果數(shù)組只包含一個(gè)數(shù)字元素,這個(gè)數(shù)字轉(zhuǎn)換為字符串,在轉(zhuǎn)換回?cái)?shù)字。

JavaScript中的"+"運(yùn)算符可以進(jìn)行數(shù)學(xué)加法和字符串連接操作。如果它的其中一個(gè)操作數(shù)是對(duì)象,則JavaScript將使用特殊的方法將對(duì)象轉(zhuǎn)換為原始值,而不是使用其他算術(shù)運(yùn)算符的方法執(zhí)行對(duì)象到數(shù)字的轉(zhuǎn)換,"= ="相等運(yùn)算符與此類似。如果將對(duì)象和一個(gè)原始值比較,則轉(zhuǎn)換將會(huì)遵照對(duì)象到原始值的轉(zhuǎn)換方式進(jìn)行。

"+" 和 "= ="應(yīng)用的對(duì)象到原始值的轉(zhuǎn)換包含日期對(duì)象的一種特殊情形。日期類是JavaScript語(yǔ)言核心中唯一的預(yù)先定義類型,它定義了有意義的向字符串和數(shù)字類型的轉(zhuǎn)換。
對(duì)于所有非日期的對(duì)象來(lái)說,對(duì)象到原始值的轉(zhuǎn)換基本上是對(duì)象到數(shù)字的轉(zhuǎn)換(首先調(diào)用valueOf( )),日期對(duì)象則使用對(duì)象到字符串的轉(zhuǎn)換模式,然而,這里的轉(zhuǎn)換和上文講述的并不完全一致:通過valueOf( )或者toString( )返回的原始值將被直接使用,而不會(huì)被強(qiáng)制轉(zhuǎn)換為數(shù)字或字符串。

和"= ="一樣,"<"運(yùn)算符以及其他關(guān)系運(yùn)算符也會(huì)做對(duì)象到原始值的轉(zhuǎn)換,但要除去日期對(duì)象的特殊情形:任何對(duì)象都會(huì)首先嘗試調(diào)用valueOf( ),然后調(diào)用toString( )。不管得到的原始值是否直接使用,它都不會(huì)進(jìn)一步被轉(zhuǎn)換為數(shù)字或字符串。

總結(jié)

本文說了說 toString( )方法 和 valueOf( )方法的基礎(chǔ)知識(shí),文中的許多概念是出自JavaScript權(quán)威指南一書,大家可以多看看書。
如果這篇文章理解了,大家可以看看下面這兩篇文章,相信你會(huì)知道更多有趣的事。
簡(jiǎn)單說 !![]==true 與 []==true 引發(fā)的思考
簡(jiǎn)單說 通過JS的隱式轉(zhuǎn)換,關(guān)鍵時(shí)刻救你一命

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

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

相關(guān)文章

  • 簡(jiǎn)單 JavaScript中的tostring( ) valueOf( )方法

    摘要:日期類定義的方法會(huì)返回它的一個(gè)內(nèi)部表示年月日以來(lái)的毫秒數(shù)。和應(yīng)用的對(duì)象到原始值的轉(zhuǎn)換包含日期對(duì)象的一種特殊情形。簡(jiǎn)單說與引發(fā)的思考簡(jiǎn)單說通過的隱式轉(zhuǎn)換,關(guān)鍵時(shí)刻救你一命 說明 所有的對(duì)象都繼承有toString() 和 valueOf() 方法,對(duì)象到字符串,對(duì)象到數(shù)字的轉(zhuǎn)換,會(huì)通過調(diào)用待轉(zhuǎn)換對(duì)象的這兩個(gè)方法中的一個(gè)來(lái)完成。 解釋 toString( )方法的作用是: 返回一個(gè)反映這個(gè)...

    ztyzz 評(píng)論0 收藏0
  • 簡(jiǎn)單 JavaScript中的tostring( ) valueOf( )方法

    摘要:日期類定義的方法會(huì)返回它的一個(gè)內(nèi)部表示年月日以來(lái)的毫秒數(shù)。和應(yīng)用的對(duì)象到原始值的轉(zhuǎn)換包含日期對(duì)象的一種特殊情形。簡(jiǎn)單說與引發(fā)的思考簡(jiǎn)單說通過的隱式轉(zhuǎn)換,關(guān)鍵時(shí)刻救你一命 說明 所有的對(duì)象都繼承有toString() 和 valueOf() 方法,對(duì)象到字符串,對(duì)象到數(shù)字的轉(zhuǎn)換,會(huì)通過調(diào)用待轉(zhuǎn)換對(duì)象的這兩個(gè)方法中的一個(gè)來(lái)完成。 解釋 toString( )方法的作用是: 返回一個(gè)反映這個(gè)...

    Gilbertat 評(píng)論0 收藏0
  • 掌握 Javascript 類型轉(zhuǎn)換:從規(guī)則開始

    摘要:首先,為了掌握好類型轉(zhuǎn)換,我們要理解一個(gè)重要的抽象操作為什么說這是個(gè)抽象操作呢因?yàn)檫@是內(nèi)部才會(huì)使用的操作,我們不會(huì)顯示調(diào)用到?;疽?guī)則中的類型轉(zhuǎn)換總是返回基本類型值,如字符串?dāng)?shù)字和布爾值,不會(huì)返回對(duì)象和函數(shù)。 Javascript 里的類型轉(zhuǎn)換是一個(gè)你永遠(yuǎn)繞不開的話題,不管你是在面試中還是工作寫代碼,總會(huì)碰到這類問題和各種的坑,所以不學(xué)好這個(gè)那是不行滴。關(guān)于類型轉(zhuǎn)換我也看過不少的書和各...

    mikyou 評(píng)論0 收藏0
  • 簡(jiǎn)單 !![]==true []==true 引發(fā)的思考

    摘要:簡(jiǎn)單說中的與方法我們一句一句的看結(jié)果是邏輯非,會(huì)將操作數(shù)的布爾值求反,而就是類型轉(zhuǎn)換,將對(duì)應(yīng)的類型轉(zhuǎn)換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數(shù)字和字符串。 說明 直接說出問題 !![] == true //結(jié)果是true [] == true //結(jié)果是false ![] == [] //結(jié)果是true 為什么會(huì)出現(xiàn)這種情...

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

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

0條評(píng)論

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