本篇文章帶給大家的內容是關於Javascript中的valueOf與toString的對比介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
+{ a: 1, toString: function() { return '10' }, valueOf: function() { return '100' } }
以上引申出物件資料的轉換的問題:
所有物件繼承了兩個轉換方法:
toString(): 它的作用是返回一個反映這個物件的字串
valueOf():它的作用是傳回它對應的原始值
##toString( )
toString()函數的作用是傳回object的字串表示。JavaScript中object預設的toString()方法傳回字串」[object Object]「。定義類別時可以實作新的toString()方法,從而傳回更有可讀性的結果。
JavaScript對於
陣列物件、函數物件、正規表示式物件以及Date日期物件都定義了更具可讀性的toString()方法:
var arr = [1, 2, 3] arr.toString() // "1,2,3"Function的toString()方法將會傳回函數的文字定義。
var fun = function() { return 'fun' } fun.toString() // "function() { return 'fun' }"RegExp的toString()方法與Function的toString()方法類似,將傳回正規表示式的文字定義。
var reg = /d+/g reg.toString() // "/d+/g"Date的toString()方法將傳回一個具有可讀性的日期時間字串。
var date = new Date() date.toString() // "Tue Feb 12 2019 14:04:36 GMT+0800 (中国标准时间)"如果Boolean值是true,則傳回 “true”。否則,返回 “false”。
var boolean = true boolean.toString() // "true"
valueOf()
valueOf()函數的作用是傳回該object本身。與toString()一樣,定義類別時可以實作新的valueOf()方法,從而傳回所需的結果。
JavaScript對於Date物件定義了更具有可讀性的valueOf()方法:
1970年1月1日零時的時間差(以毫秒為單位)。
var date = new Date() date.valueOf() // 1549951476233
var colors = ["red", "blue", "green"] // 创建一个包含3 个字符串的数组 alert(colors.toString()) // red,blue,green alert(colors.valueOf()) // red,blue,green alert(colors) // red,blue,green
var arr = [1,2,3] alert(Array.isArray(arr.valueOf())) // true alert(Array.isArray(arr.toString())) // false結果是第一個是true而第二個是false,為什麼呢,其實valueOf()調用完以後還是回傳一個陣列。這個陣列被alert的時候會呼叫toString()函數,所以不是valueOf()和toString()函數相同,而是間接的呼叫了toString()函數!
進一步測試下:
var arr = [1,2,3] arr.toString = function () { alert("调用了toString函数"); } alert(arr.valueOf()) // "调用了toString函数"結果就是我們會看到「呼叫了`toString函數」。
驗證如下程式碼:
var test = { value: 10, toString: function() { console.log('toString') return this.value }, valueOf: function() { console.log('valueOf') return this.value } } alert(test) // 10 toString alert(+test) // 10 valueOf alert('' + test) // 10 valueOf alert(String(test)) // 10 toString alert(Number(test)) // 10 valueOf alert(test == '10') // true valueOf alert(test === '10') // falsevalueOf的意思是傳回最適合該物件類型的原始值,而toString則是將在該物件類型的原始值以字串形式傳回。
範例1
alert(test) // 10 toString這裡我們的alert函數需要是的字串,所以取得的是字串,而不是原始值,故而呼叫了toString
範例2
alert(+test) // 10 valueOf同理,alert要的是字串不是原始值,其實是( test)的結果呼叫了toString,而test被呼叫了valueOf
為了驗證我們這樣寫:
var test = { value: 1, valueOf: function () { alert("调用了test的valueOf函数") return this.value }, toString: function () { alert("调用了test的toString函数") return this.value } }; var test2 = { value: +test, valueOf: function () { alert("调用了test2的valueOf函数") return this.value; }, toString: function () { alert("调用了test2的toString函数") return this.value } }; alert(test2) // 调用了test的valueOf函数 // 调用了test2的toString函数 // 1其中讓test2 = test,那麼即可知道結果,果然如此,呼叫了test的valueOf和test2的toString##範例3
alert('' + test) // 10 valueOf
同理,我們可以把上一段寫的程式裡面的test2: test改成test2:'' test
alert(String(test)) // 10 toString
String這個強制轉換其實在其內部是呼叫了傳入參數的toString函數
#範例5
alert(Number(test)) // 10 valueOf
alert(test == '10') // true valueOf
alert(test === '10') // false
總結
valueOf偏向運算,toString偏向顯示。
在進行強轉字串類型時將優先呼叫toString方法,強轉為數字時優先呼叫valueOf。 在有運算運算子的情況下,valueOf的優先權高於toString。 下面給大家簡單說下valueof和tostring的差別:valueOf():傳回最適合該物件類型的原始值toString(): 將此對象的原始值以字串形式傳回這兩個方法一般是交由JS去隱式調用,以滿足不同的運算情況。 在數值運算裡,會優先呼叫valueOf(),如a b#在字串運算裡,會優先呼叫toString(),如alert(c)以上是Javascript中的valueOf與toString的比較介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!