《javascript高級程序設計》筆記:valueOf() / toString() 對比

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

相關文章
相關標籤/搜索