valueOf和toString的區別


基本上所有的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  想看案例的可以看看這個


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM