日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Javascript中的valueOf與toString有什么不同

Javascript中的valueOf與toString有什么不同?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都做網(wǎng)站、金口河網(wǎng)絡(luò)推廣、小程序開發(fā)、金口河網(wǎng)絡(luò)營銷、金口河企業(yè)策劃、金口河品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供金口河建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

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

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

  1. toString(): 它的作用是返回一個反映這個對象的字符串

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

toString()

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

Array的toString()方法將返回以逗號分隔的數(shù)組成員。

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

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

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

RegExp的toString()方法與Function的toString()方法類似,將返回正則表達(dá)式的文本定義。

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

Date的toString()方法將返回一個具有可讀性的日期時間字符串。

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

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

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

valueOf()

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

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

var date = new Date()
date.valueOf() // 1549951476233
  • 其他一律返回對象本身。

示例

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

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

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

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

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

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

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的意思是返回最適合該對象類型的原始值,而toString則是將在該對象類型的原始值以字符串形式返回。

示例1

alert(test) // 10 toString

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

示例2

alert(+test) // 10 valueOf

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

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)用了test的valueOf和test2的toString

示例3

alert('' + test) // 10 valueOf

同理,我們可以把上一段寫的程序里面的test2: + test改成test2:'' + test

示例4

alert(String(test)) // 10 toString

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

示例5

alert(Number(test)) // 10 valueOf

示例6

alert(test == '10') // true valueOf

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

示例7

alert(test === '10') // false

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

總結(jié)

valueOf偏向于運算,toString偏向于顯示。

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

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

下面給大家簡單說下valueof和tostring的區(qū)別:

valueOf():返回最適合該對象類型的原始值

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

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

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

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

關(guān)于Javascript中的valueOf與toString有什么不同問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


本文標(biāo)題:Javascript中的valueOf與toString有什么不同
文章起源:http://www.dlmjj.cn/article/pspeig.html