MDN
中這樣描述 valueOf()
和 toString()
:javascript
JavaScript 調用 valueOf() 方法用來把對象轉換成原始類型的值(數值、字符串和布爾值)。 你不多須要本身調用此函數;當遇到一種須要轉換成一個原始值狀況時候, JavaScript 會自動調 用此函數。 默認狀況下, valueOf() 會被每一個對象Object繼承。每個內置對象都會覆蓋這個方法爲了返回 一個合理的值,若是對象沒有原始值,valueOf() 就會返回對象自身; 每一個對象都有一個 toString() 方法,當對象被表示爲文本值時或者當以指望字符串的方式引用 對象時,該方法被自動調用。默認狀況下,toString() 方法被每一個繼承自Object的對象繼承。如 果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象類型
簡單的說:valueOf()
函數用於返回指定對象的原始值;toString()
函數用於返回指定對象的字符串;html
對象 | valueOf() 返回值 | toString() 返回值 |
---|---|---|
Number | 數字值(number) | 數字值(string) |
String | 字符串值 | 字符串值 |
Boolean | 布爾值 | 字符串值 |
Object | 對象自己 | 字符串值 |
Function | 函數自己 | 字符串值 |
Date | 以毫秒數存儲的時間值(number) | 標準時間輸出(string) |
// Number var num = 15.26540, num2 = new Number(15.26540); console.log( 'valueOf', num.valueOf() === num ); // true number類型 console.log( 'toString', num.toString() === num );// false string類型 console.log( 'valueOf', num2.valueOf() === num2 ); // false number類型 console.log( 'toString', num2.toString() === num2 );// false string類型 console.log( num.valueOf() === num.toString());// false console.log( num2.valueOf() === num2.toString());// false // String var str = "abcd", str2 = new String("abcd"); console.log( 'valueOf', str.valueOf() === str );// true string類型 console.log( 'toString', str.toString() === str );// true string類型 console.log( 'valueOf', str2.valueOf() === str2 );// false string類型 console.log( 'toString', str2.toString() === str2 );// false string類型 console.log( str.valueOf() === str.toString());// true console.log( str2.valueOf() === str2.toString());// true // Boolean var bool = true, bool2 = new Boolean(true); console.log( 'valueOf', bool.valueOf() === bool );// true string類型 console.log( 'toString', bool.toString() === bool );// false string類型 console.log( 'valueOf', bool2.valueOf() === bool2 );// false boolean類型 console.log( 'toString', bool2.toString() === bool2 );// false string類型 console.log( bool.valueOf() === bool.toString());// false console.log( bool2.valueOf() === bool2.toString());// false // Object var obj = {name: "張三", age: 18}; console.log( 'valueOf', obj.valueOf() === obj );// true object類型 console.log( 'toString', obj.toString() === obj );// false string類型 console.log( obj.valueOf() === obj.toString());// false // Function var fn = function(){}, fn2 = new Function('x', 'y', 'return x+y') console.log( 'valueOf', fn.valueOf() === fn );// true object類型 console.log( 'toString', fn.toString() === fn );// false string類型 console.log( 'valueOf', fn2.valueOf() === fn2 );// true object類型 console.log( 'toString', fn2.toString() === fn2 );// false string類型 console.log( fn.valueOf() === fn.toString());// false console.log( fn2.valueOf() === fn2.toString());// false // Date var date = new Date(); console.log( 'valueOf', date.valueOf() );// 1501830320383 number類型 console.log( 'toString', date.toString() );// Fri Aug 04 2017 15:05:45 GMT+0800 (中國標準時間) string類型 console.log( date.valueOf() === date.toString());// false
移步:valueOf() / toString()深刻分析對比java