JavaScript對象的valueOf()方法


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

String.prototype.valueOf()

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()方法
案例:
Number.prototype.valueOf()

Boolean.prototype.valueOf()

語法:bool.valueOf()
返回值: 返回給定Boolean對象的原始值
說明: BooleanvalueOf()方法返回一個Boolean字面量的原始值作為布爾數據類型。該方法通常在JavaScript內部調用,而不是在代碼中顯示調用。
案例:
Boolean.prototype.valueOf()

Symbol.prototype.valueOf()

語法: Symbol().valueOf()
返回值:返回給定Symbol對象的原始值
說明:SymbolvalueOf()方法返回Symbol對象的原始值作為Symbol數據類型。JavaScript調用valueOf()方法將對象轉換為原始值。你很少需要自己調用valueOf()方法。當遇到期望有原始值的對象時,JavaScript會自動調用它。
案例:
 Symbol.prototype.valueOf()
[完]


免責聲明!

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



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