基本上所有的JavaScript數據類型都有valueOf(),toString()方法,null除外,這兩個方法解決了JavaScript值運算和顯示的問題
valueOf()會把數據類型轉換成原始類型,也就是說原來是什么類型,轉換后還是什么類型,日期類型除外
toString()會把數據類型轉換成string類型,也就是說不管原來是什么類型,轉換后一律是string類型
這兩個方法有意思的地方在於什么時候使用,總結如下:
1、valueOf()偏向於運算,toString()偏向於顯示
2、對象轉換時,優先調用toString()
3、強轉字符串的情況下,優先調用toString()方法;強轉數字的情況下優先調用valueOf()
4、正常情況下,優先調用toString()
5、在有運算操作符的情況下valueOf()的優先級高於toString(),這里需要注意的是當調用valueOf()方法無法運算后還是會再調用toString()方法
下面來看個案例:
var a = { a : 10 , toString : function(){ console.log("tostring"); return this.a } }; alert(+a); //10 tostring,先調用valueOf()方法,發現無法進行+運算,緊接着調用toString()方法
var b= {a:2,valueOf:function(){return this.a+2}}; alert(+b) //4 ,先調用valueOf()方法,返回4,可以進行運算,不再調用toString()
var b= {a:2,valueOf:function(){return this.a+2},toString : function(){ console.log("tostring"); return this.a }}; alert(+b) //4 ,先調用valueOf()方法,返回4,可以進行運算,不再調用toString(),從輸出上可以看出沒有調用toString()方法
JavaScript各種數據對象調用valueOf,toString返回值也是個容易出錯的地方,下面做個總結:
調用valueOf()
對象 | 返回值 | 類型 |
Array | 數組本身 | Array |
Boolean | Boolean 值。 | Boolean |
Date | 存儲的時間是從 1970 年 1 月 1 日午夜開始計的毫秒數 UTC。 | Number |
Function | 函數本身。 | Function |
Number | 數字值。 | Number |
Object | 對象本身。這是默認情況。 | Object |
String | 字符串 | String |
調用toString()
對象 | 返回值 | 類型 |
Array | 數組的元素被轉換為字符串,這些字符串由逗號分隔,連接在一起。其操作與 Array.toString 和 Array.join 方法相同。 | String |
Boolean | 字符串“true”,“false” | String |
Date | 字符串日期,如"Fri Dec 23 2016 11:24:47 GMT+0800 (中國標准時間)" | String |
Function | 函數字符串 | String |
Number | 字符串形式值 | String |
Object | "[object Object]" | String |
String | 字符串 | String |
參考資料:
http://www.jb51.net/article/34843.htm 想看案例的可以看看這個