新聞中心
tostring 和 valueOf 函數(shù)是解決值的顯示和運算的問題。所有的 Object 類型的數(shù)據(jù)都自帶 toString 和 valueOf 函數(shù)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、隆昌網(wǎng)站維護(hù)、網(wǎng)站推廣。
比如我們定一個 Object 類型數(shù)據(jù):
const obj = {
name: "duxin"
}
console.log(obj.valueOf()); // { name: 'duxin' }toString()
toString 函數(shù)的作用是把一個邏輯轉(zhuǎn)換為字符串,并且返回 Object 類型數(shù)據(jù)的 toString()默認(rèn)的返回值"[object Object]"。
如果我們在定義對象的時候,可以重寫 tosString 函數(shù),這樣 toString 的返回值可讀性會更好一些,比如:
const obj = {
name: "duxin",
toString:function(){
return this.name;
}
}
console.log(obj.valueOf()); // { name: 'duxin' }
console.log(obj.toString()); // duxin以下這些函數(shù)都是有自定義的 toString 函數(shù):
- Array 的 toString 函數(shù)返回值是以逗號分隔的字符串;
- Function 的 toString 函數(shù)返回值是函數(shù)自身的文本定義;
- Date 的 toString 函數(shù)返回值是時間字符串;
valueOf()
valueOf 函數(shù)返回引用類型的原始值,如果沒有原始值,就返回"{}",就是空對象的字面量。
- Array的valueOf函數(shù)返回的值數(shù)組本身;
- Function的valueOf函數(shù)返回的是函數(shù)本身;
- Date的valueOf函數(shù)返回的值時間戳。
在發(fā)生數(shù)據(jù)類型轉(zhuǎn)換的時候,有l(wèi)iang兩種場景:
- 引用數(shù)據(jù)類型轉(zhuǎn)為String,先是調(diào)用toString函數(shù),有值的話,就直接返回該字符串;如果對象沒有toString,那就調(diào)用valueOf函數(shù),然后將原始值轉(zhuǎn)為字符串并且返回;如果toString或者valueOf都不能獲取原始值,那就拋出類型轉(zhuǎn)換異常;
var arr = [];
arr.toString = function () {
console.log('調(diào)用了toString()函數(shù)');
return [];
};
arr.valueOf = function () {
console.log('調(diào)用了valueOf()函數(shù)');
return [];
};
console.log(String(arr));在執(zhí)行String(arr)的時候,是先將數(shù)組轉(zhuǎn)為字符串,調(diào)用的是toString,它的結(jié)果不能轉(zhuǎn)為string;
那就調(diào)用valueOf函數(shù),它的返回值也是一個空數(shù)組,也不能轉(zhuǎn)為字符串,那就只能拋出類型轉(zhuǎn)換異常了。
- 引用類型在轉(zhuǎn)化為number的時候,首先會判斷對象是否含有valueOf函數(shù),如果有,那就調(diào)用valueOf函數(shù),把它的返回值轉(zhuǎn)為數(shù)字,然后返回;如果沒有valueOf函數(shù),就調(diào)用toString函數(shù),將返回值轉(zhuǎn)為數(shù)字并返回。如果toString或者valueOf都不能獲取到原始值的話,那就拋出類型轉(zhuǎn)換異常。
標(biāo)題名稱:一篇搞懂 toString()函數(shù)與valueOf()函數(shù)
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/cojpeoo.html


咨詢
建站咨詢
