成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

關(guān)于Javascript中的valueOf與toString

lvzishen / 3402人閱讀

摘要:中默認(rèn)的方法返回字符串。的方法將返回一個(gè)具有可讀性的日期時(shí)間字符串。函數(shù)的作用是返回該自身。其他一律返回對(duì)象本身。在有運(yùn)算操作符的情況下,的優(yōu)先級(jí)高于。

+{ a: 1, toString: function() { return "10" }, valueOf: function() { return "100" } }

以上引申出對(duì)象數(shù)據(jù)的轉(zhuǎn)換的問(wèn)題:
所有對(duì)象繼承了兩個(gè)轉(zhuǎn)換方法:

toString(): 它的作用是返回一個(gè)反映這個(gè)對(duì)象的字符串

valueOf():它的作用是返回它相應(yīng)的原始值

toString()

toString()函數(shù)的作用是返回object的字符串表示。
JavaScript中object默認(rèn)的toString()方法返回字符串”[object Object]“。定義類(lèi)時(shí)可以實(shí)現(xiàn)新的toString()方法,從而返回更加具有可讀性的結(jié)果。
JavaScript對(duì)于數(shù)組對(duì)象、函數(shù)對(duì)象、正則表達(dá)式對(duì)象以及Date日期對(duì)象均定義了更加具有可讀性的toString()方法

ArraytoString()方法將返回以逗號(hào)分隔的數(shù)組成員。

var arr = [1, 2, 3]
arr.toString() // "1,2,3"

FunctiontoString()方法將返回函數(shù)的文本定義。

var fun = function() { return "fun" }
fun.toString() // "function() { return "fun" }" 

RegExptoString()方法與FunctiontoString()方法類(lèi)似,將返回正則表達(dá)式的文本定義。

var reg = /d+/g
reg.toString() // "/d+/g"

DatetoString()方法將返回一個(gè)具有可讀性的日期時(shí)間字符串。

var date = new Date()
date.toString() // "Tue Feb 12 2019 14:04:36 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)"

如果Boolean值是true,則返回 “true”。否則,返回 “false”。

var boolean = true
boolean.toString() // "true"
valueOf()

valueOf()函數(shù)的作用是返回該object自身。
toString()一樣,定義類(lèi)時(shí)可以實(shí)現(xiàn)新的valueOf()方法,從而返回需要的結(jié)果。
JavaScript對(duì)于Date對(duì)象定義了更加具有可讀性的valueOf()方法:

DatevalueOf()方法將返回一個(gè)時(shí)間戳數(shù)值,該數(shù)值為Date對(duì)象與1970年1月1日零時(shí)的時(shí)間差(以毫秒為單位)

var date = new Date()
date.valueOf() // 1549951476233

其他一律返回對(duì)象本身。

示例
var colors = ["red", "blue", "green"] // 創(chuàng)建一個(gè)包含3 個(gè)字符串的數(shù)組 
alert(colors.toString()) // red,blue,green 
alert(colors.valueOf()) // red,blue,green 
alert(colors) // red,blue,green

三個(gè)輸出全部一樣,那么toString()和valueOf()區(qū)別到底是什么?看下一個(gè)我寫(xiě)的例子:

var arr = [1,2,3]
alert(Array.isArray(arr.valueOf())) // true
alert(Array.isArray(arr.toString())) // false

結(jié)果是第一個(gè)是true而第二個(gè)是false,為什么呢,其實(shí)valueOf()調(diào)用完以后還是返回一個(gè)數(shù)組。這個(gè)數(shù)組被alert的時(shí)候會(huì)調(diào)用toString()函數(shù),所以不是valueOf()toString()函數(shù)相同,而是間接的調(diào)用了toString()函數(shù)!
進(jìn)一步測(cè)試下:

var arr = [1,2,3] 
arr.toString = function () { 
  alert("調(diào)用了toString函數(shù)");
} 
alert(arr.valueOf()) // "調(diào)用了toString函數(shù)"

結(jié)果就是我們會(huì)看到“調(diào)用了`toString函數(shù)”。
驗(yàn)證如下代碼:

var test = { 
  value: 10, 
  toString: function() { 
    console.log("toString")
    return this.value
  }, 
  valueOf: function() { 
    console.log("valueOf")
    return this.value
  } 
} 
alert(test) // 10 toString 
alert(+test) // 10 valueOf 
alert("" + test) // 10 valueOf 
alert(String(test)) // 10 toString 
alert(Number(test)) // 10 valueOf 
alert(test == "10") // true valueOf 
alert(test === "10") // false

valueOf的意思是返回最適合該對(duì)象類(lèi)型的原始值,而toString則是將在該對(duì)象類(lèi)型的原始值以字符串形式返回。

示例1
alert(test) // 10 toString 

這里我們的alert函數(shù)需要是的字符串,所以獲取的是字符串,而不是原始值,故而調(diào)用了toString

示例2
alert(+test) // 10 valueOf

同理,alert要的是字符串不是原始值,其實(shí)是(+test)的結(jié)果調(diào)用了toString,而+test被調(diào)用了valueOf
為了驗(yàn)證我們這樣寫(xiě):

var test = { 
  value: 1, 
  valueOf: function () { 
    alert("調(diào)用了test的valueOf函數(shù)")
    return this.value 
  }, 
  toString: function () { 
    alert("調(diào)用了test的toString函數(shù)") 
    return this.value 
  } 
}; 
var test2 = { 
  value: +test, 
  valueOf: function () { 
    alert("調(diào)用了test2的valueOf函數(shù)") 
    return this.value;
  }, 
  toString: function () { 
    alert("調(diào)用了test2的toString函數(shù)")
    return this.value 
  } 
}; 
alert(test2)
// 調(diào)用了test的valueOf函數(shù)
// 調(diào)用了test2的toString函數(shù)
// 1

其中讓test2 = +test,那么即可知道結(jié)果,果然如此,調(diào)用了testvalueOftest2toString

示例3
alert("" + test) // 10 valueOf 

同理,我們可以把上一段寫(xiě)的程序里面的test2: + test改成test2:"" + test

示例4
alert(String(test)) // 10 toString 

String這個(gè)強(qiáng)制轉(zhuǎn)換其實(shí)在其內(nèi)部是調(diào)用了傳入?yún)?shù)的toString函數(shù)

示例5
alert(Number(test)) // 10 valueOf
示例6
alert(test == "10") // true valueOf

這個(gè)里面的判等的順序是,獲取原始值,然后判斷兩邊的原始值是否相等,所以調(diào)用valueOf

示例7
alert(test === "10") // false

===操作符不進(jìn)行隱式轉(zhuǎn)換,判全等的第一個(gè)步驟是判斷類(lèi)型,因?yàn)轭?lèi)型都不一樣了,所以后面什么都不會(huì)調(diào)用

總結(jié)

valueOf偏向于運(yùn)算,toString偏向于顯示

在進(jìn)行強(qiáng)轉(zhuǎn)字符串類(lèi)型時(shí)將優(yōu)先調(diào)用toString方法,強(qiáng)轉(zhuǎn)為數(shù)字時(shí)優(yōu)先調(diào)用valueOf

在有運(yùn)算操作符的情況下,valueOf的優(yōu)先級(jí)高于toString

下面給大家簡(jiǎn)單說(shuō)下valueoftostring的區(qū)別:

valueOf():返回最適合該對(duì)象類(lèi)型的原始值

toString(): 將該對(duì)象的原始值以字符串形式返回

這兩個(gè)方法一般是交由JS去隱式調(diào)用,以滿(mǎn)足不同的運(yùn)算情況。

在數(shù)值運(yùn)算里,會(huì)優(yōu)先調(diào)用valueOf(),如a + b

在字符串運(yùn)算里,會(huì)優(yōu)先調(diào)用toString(),如alert(c)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/101590.html

相關(guān)文章

  • 關(guān)于javascript中的toString()和valueOf()

    摘要:和是對(duì)象的兩個(gè)方法,你在瀏覽器后臺(tái)輸入就可以看到了它們是其中的兩個(gè)。先說(shuō)一下兩個(gè)東西的用途返回對(duì)象的字符串表示。返回對(duì)象的字符串?dāng)?shù)值或布爾值表示。如果是彈窗的話(huà),直接調(diào)用方法。至于其他情況,待續(xù) 關(guān)于javascript中的toString()和valueOf() 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 關(guān)于j...

    paulquei 評(píng)論0 收藏0
  • 關(guān)于JavaScript函數(shù)柯里化問(wèn)題探索

    摘要:函數(shù)柯里化關(guān)于函數(shù)柯里化的問(wèn)題最初是在忍者秘籍中講閉包的部分中看到的,相信很多同學(xué)見(jiàn)過(guò)這樣一道和柯里化有關(guān)的面試題實(shí)現(xiàn)一個(gè)函數(shù),使得如下斷言能夠能夠通過(guò)簡(jiǎn)單說(shuō)就是實(shí)現(xiàn)一個(gè)求值函數(shù),能夠?qū)⑺袇?shù)相加得出結(jié)果。方法返回一個(gè)表示該對(duì)象的字符串。 函數(shù)柯里化 ??關(guān)于函數(shù)柯里化的問(wèn)題最初是在《JavaScript忍者秘籍》中講閉包的部分中看到的,相信很多同學(xué)見(jiàn)過(guò)這樣一道和柯里化有關(guān)的面試題:...

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

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

    mikyou 評(píng)論0 收藏0
  • JavaScript類(lèi)型轉(zhuǎn)換的迷糊事兒

    摘要:下面分幾步來(lái)簡(jiǎn)單的探探不同類(lèi)型的轉(zhuǎn)換吧以下的內(nèi)容,都可以從權(quán)威指南中找到。其他值轉(zhuǎn)換成在編寫(xiě)代碼的過(guò)程中,幾乎不用考慮它的取值類(lèi)型。核心內(nèi)置類(lèi),會(huì)嘗試先于可以理解為對(duì)象優(yōu)先轉(zhuǎn)換成數(shù)字例外的是,利用的是轉(zhuǎn)換。 最近在寫(xiě)公司的登錄注冊(cè)模塊,遇到類(lèi)型不同相比較的時(shí)候,就心驚膽戰(zhàn),每次都要用瀏覽器來(lái)驗(yàn)證一下,決定亂七八糟的隨便寫(xiě)一下,方便日后自己回顧知識(shí)~ 弱類(lèi)型帶來(lái)的那些讓人迷糊的事 弱類(lèi)型...

    harriszh 評(píng)論0 收藏0
  • 關(guān)于JS類(lèi)型轉(zhuǎn)換的筆記

    摘要:文獻(xiàn)權(quán)威指南類(lèi)型轉(zhuǎn)換章節(jié)對(duì)象到的具體代碼跟對(duì)象到的類(lèi)似,只不過(guò)是方法的優(yōu)先級(jí)變換了,跟規(guī)則是吻合的。 javascript是一門(mén)弱類(lèi)型語(yǔ)言,不同的基礎(chǔ)數(shù)據(jù)之間的運(yùn)算自己會(huì)進(jìn)行一個(gè)相關(guān)的類(lèi)型轉(zhuǎn)換,如常見(jiàn)的 var t = test, b = t + 12 //test12 這些常見(jiàn)的類(lèi)型轉(zhuǎn)換比較熟悉,但是涉及到關(guān)于對(duì)象與原始值之間的運(yùn)算,類(lèi)型轉(zhuǎn)換規(guī)則比較特殊 基礎(chǔ)知識(shí)點(diǎn): var t ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<