目錄
範例6
這個裡面的判等的順序是,取得原始值,然後判斷兩邊的原始值是否相等,所以呼叫valueOf
首頁 web前端 js教程 Javascript中的valueOf與toString的比較介紹(程式碼範例)

Javascript中的valueOf與toString的比較介紹(程式碼範例)

Feb 13, 2019 am 10:18 AM
javascript

本篇文章帶給大家的內容是關於Javascript中的valueOf與toString的對比介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

+{ a: 1, toString: function() { return '10' }, valueOf: function() { return '100' } }
登入後複製

以上引申出物件資料的轉換的問題:
所有物件繼承了兩個轉換方法:

  1. toString(): 它的作用是返回一個反映這個物件的字串

  2. valueOf():它的作用是傳回它對應的原始值

##toString( )

toString()函數的作用是傳回object的字串表示。

JavaScript中object預設的toString()方法傳回字串」[object Object]「。定義類別時可以實作新的toString()方法,從而傳回更有可讀性的結果。
JavaScript對於
陣列物件、函數物件、正規表示式物件以及Date日期物件都定義了更具可讀性的toString()方法:

Array的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()方法:

Date的valueOf()方法將傳回時間戳數值,該數值為Date物件與

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
登入後複製

三個輸出全部一樣,那麼toString()和valueOf()差別到底是什麼?看下一個我寫的例子:

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') // false
登入後複製
valueOf的意思是傳回最適合該物件類型的原始值,而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

範例4

alert(String(test)) // 10 toString
登入後複製
String這個強制轉換其實在其內部是呼叫了傳入參數的toString函數

#範例5

alert(Number(test)) // 10 valueOf
登入後複製

範例6

alert(test == '10') // true valueOf
登入後複製

這個裡面的判等的順序是,取得原始值,然後判斷兩邊的原始值是否相等,所以呼叫valueOf

#範例7

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles