js對象中的valueOf()
方法和toString()
方法非常類似,但是,當需要返回對象的原始值而非字符串的時候才調用它,尤其是轉換為數字的時候。如果在需要使用原始值的上下文中使用了對象,JavaScript就會自動調用valueOf()
方法。
valueOf()
方法是Object
的原型方法,每個對象都具有該方法,但是各對象返回的值有一定的區別。我們一起來看看。
Object.prototype.valueOf()
JavaScript調用valueOf()
方法將對象轉換為原始值。你很少需要自己調用valueOf()
方法;
默認情況下,valueOf()
方法由Object后面的每個對象繼承。每個內置的核心對象都會覆蓋此方法以放回適當的值。
如果對象沒有原始值,則valueOf()
將返回對象本身。
你可以在自己的代碼中使用valueOf()
將內置對象轉換為原始值。創建自定義對象時,可以覆蓋Object.prototype.valueOf()
來調用自定義方法,而不是默認Object
方法。
覆蓋自定義對象的valueOf()
方法
你可以創建一個取代valueOf()
方法的函數,你的方法必須不能傳入參數。
假設你有個對象叫MyNumberType
而你想為它創建一個valueOf()
方法。下面的代碼為valueOf()
方法賦予了一個自定義函數:
MyNumberType.prototype.valueOf = function() { return customPrimitiveValue; };
有了這樣的一個方法,下一次每當MyNumberType
要被轉換為原始類型值時,JavaScript在此之前會自動調用自定義的valueOf()
方法。
valueOf()
方法一般都會被JavaScript自動調用,但你也可以像下面代碼那樣自己調用:
myNumberType.valueOf()
String.prototype.valueOf()
語法:strObj.valueOf()
返回值:表示給定String
對象的原始值
說明:valueOf()
方法返回一個String
對象的原始值,該值等同於String.prototype.toString()
。
該方法通常在JavaScript內部被調用,而不是在代碼里顯示調用。
let x = new String('Hello world')
console.log(x.valueOf()) // Hello world
Date.prototype.valueOf()
語法:dataObj.valueOf()
返回值:表示給定Date
對象的原始值
說明:valueOf()
方法返回以數值格式表示的一個Date
對象的原始值。該值從1970年1月1日0時0分0秒(UTC,即協調世界時)到該日期對象所代表時間的毫秒數。
該方法的功能和Date.prototype.getTime()
方法一樣。
該方法通常在JavaScript內部調用,而不是在代碼中顯示調用。
var x = new Date(2018, 1, 12)
var myVar = x.valueOf()
console.log(myVar) // 1518364800000
Number.prototype.valueOf()
語法: numObj.valueOf()
返回值:表示給定Number
對象的原始值。
說明:該方法通常在JavaScript內部調用,而不是在代碼中顯示調用。覆蓋Object.prototype.valueOf()
方法
案例:
Boolean.prototype.valueOf()
語法:bool.valueOf()
返回值: 返回給定Boolean
對象的原始值
說明: Boolean
的valueOf()
方法返回一個Boolean
字面量的原始值作為布爾數據類型。該方法通常在JavaScript內部調用,而不是在代碼中顯示調用。
案例:
Symbol.prototype.valueOf()
語法: Symbol().valueOf()
返回值:返回給定Symbol
對象的原始值
說明:Symbol
的valueOf()
方法返回Symbol
對象的原始值作為Symbol
數據類型。JavaScript調用valueOf()
方法將對象轉換為原始值。你很少需要自己調用valueOf()
方法。當遇到期望有原始值的對象時,JavaScript會自動調用它。
案例:
[完]