搜尋
首頁web前端js教程Javascript中valueOf與toString區別淺析_javascript技巧

前言

基本上,所有JS資料型別都擁有這兩種方法,null除外。它們兩個解決javascript值運算與顯示的問題,重寫會增加它們所呼叫的最佳化。

檢定分析

先看一個例子:

複製程式碼 程式碼如下:
 i: 10,
 valueOf: function() { return this.i 30; },
 toString: function() { return this.valueOf() 10; }
}

alert(aaa > 20); // true
alert( aaa); // 40 alert(aaa); // 50



之所以有這樣的結果,因為它們偷偷地呼叫valueOf或toString方法。
但如何區分什麼情況下是呼叫了哪個方法呢,我們可以用另一個方法測試一下。

由於用到console.log,請在裝有firebug的FF中實驗!



複製程式碼 程式碼如下:var bbb = {
 🎜> toString: function() {
  console.log('toString');
  return this.i;
 },
 valueOf: function() {
  cons> valueOf: function() {
valueOf');
  return this.i;
 }
}

alert(bbb);// 10 toString
alert( bbb); // 10 valueOfalert('' bbb); // 10 valueOf

alert(String(bbb)); / / 10 toString
alert(Number(bbb)); // 10 valueOf
alert(bbb == '10'); // true valueOf
alert(bbb === '10'); / / false


結果給人的感覺是,如果轉換為字串時呼叫toString方法,如果是轉換為數值時則呼叫valueOf方法,但其中有兩個很不和諧。一個是alert('' bbb),字串合拼應該是呼叫toString方法…另一個我們暫時可以理解為===運算子不進行隱式轉換,因此不呼叫它們。為了追究真相,我們需要更嚴謹的實驗。



複製程式碼 程式碼如下:var aa = {
 i:10,  toString: function() {
  console.log('toString');
  return this.i;
 }
}
alert(aa)/// 10 toString
}
alert(aa);// 100 to >alert( aa); // 10 toString
alert('' aa); // 10 toString
alert(String(aa)); // 10 toString
alert(Number(aa)); // 10 toString
alert(aa == '10'); // true toString


再看valueOf。


複製程式碼 程式碼如下:var bb = {
 i:10,  valueOf: function() {
  console.log('valueOf');
  return this.i;
 }
}
}

alert(bb);// [object Object]
alert( bb); // 10 valueOf alert('' bb); // 10 valueOf

alert(String(bb)) ; // [object Object]
alert(Number(bb)); // 10 valueOf
alert(bb == '10'); // true valueOf


發現有點不同吧? !它沒有像上面toString那樣統一規整。
對於那個[object Object],我估計是從Object那裡繼承過來的,我們再去掉它看看。




複製程式碼 程式碼如下:Object.prototype.toString = null]; cc = {
 i: 10,
 valueOf: function() {
  console.log('valueOf');
  return this.i;
 }


alert(cc);// 10 valueOf
alert( cc); // 10 valueOf
alert('' cc); // 10 valueOf alert(String(cc) ); // 10 valueOf

alert(Number(cc)); // 10 valueOf
alert(cc == '10'); // true valueOf


總結:valueOf偏向運算,toString偏向顯示。
1、 在進行物件轉換時(例如:alert(a)),將優先呼叫toString方法,如若沒有重寫toString將呼叫valueOf方法,如果兩個方法都不沒有重寫,但按Object的toString輸出。
2、 進行強轉字串型別時將優先呼叫toString方法,強轉為數字時優先呼叫valueOf。
3、 在有運算運算元的情況下,valueOf的優先權高於toString。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用java的String.valueOf()函数将基本数据类型转换为字符串使用java的String.valueOf()函数将基本数据类型转换为字符串Jul 24, 2023 pm 07:55 PM

使用Java的String.valueOf()函数将基本数据类型转换为字符串在Java开发中,当我们需要将基本数据类型转换为字符串时,一种常见的方法是使用String类的valueOf()函数。这个函数可以接受基本数据类型的参数,并返回对应的字符串表示。在本文中,我们将探讨如何使用String.valueOf()函数进行基本数据类型转换,并提供一些代码示例来

使用java的Boolean.valueOf()函数将字符串转换为布尔值使用java的Boolean.valueOf()函数将字符串转换为布尔值Jul 24, 2023 pm 05:15 PM

使用Java的Boolean.valueOf()函数将字符串转换为布尔值在Java编程中,经常会遇到需要将字符串转换为布尔值的情况。而Java提供了一个便捷的方法来实现这一需求,即使用Boolean.valueOf()函数。该函数可以将字符串表示的布尔值转换为对应的布尔类型。下面我们来详细了解一下Boolean.valueOf()的用法。给定一个字符串,我们

Java中valueOf方法的用法及示例Java中valueOf方法的用法及示例Apr 24, 2023 pm 02:13 PM

1、概念通过字符串获取单个枚举对象,语法形式有三种。2、参数i,Integer对象的整数。s,Integer对象的字符串。radix,在解析字符串s时使用的进制数,用于指定使用的进制数。3、返回值一个由字符串参数代表的整数对象异常,如果不能解析字符串,则抛出NumberFormatException异常4、实例publicenumSignal{//定义一个枚举类型GREEN,YELLOW,RED;publicstaticvoidmain(String[]args){Signalgreen=Sig

使用StringBuffer类的toString()方法将StringBuffer转换为字符串使用StringBuffer类的toString()方法将StringBuffer转换为字符串Jul 25, 2023 pm 06:45 PM

使用StringBuffer类的toString()方法将StringBuffer转换为字符串在Java中,StringBuffer类是用于处理可变字符串的类,它提供了许多方便的方法来修改和操作字符串。当我们需要将一个StringBuffer对象转换为字符串时,可以使用toString()方法来实现。StringBuffer类的toString()方法返回一

使用java的String.valueOf()函数将字符数组转换为字符串使用java的String.valueOf()函数将字符数组转换为字符串Jul 27, 2023 am 11:22 AM

使用Java的String.valueOf()函数将字符数组转换为字符串在Java编程中,我们经常需要将字符数组转换为字符串。幸运的是,Java提供了一个方便的方法String.valueOf()来实现这个功能。在本文中,我们将介绍如何使用String.valueOf()函数将字符数组转换为字符串,并提供相应的代码示例。String.valueOf()函数是

使用java的String.valueOf()函数将其他类型转换为字符串使用java的String.valueOf()函数将其他类型转换为字符串Jul 24, 2023 pm 10:31 PM

使用Java的String.valueOf()函数将其他类型转换为字符串在Java开发中,经常会遇到将其他数据类型转换为字符串的需求。为了满足这一需求,Java提供了String.valueOf()函数来实现类型转换。本文将介绍如何使用String.valueOf()函数将其他类型转换为字符串,并提供代码示例。将基本数据类型转换为字符串首先,我们来看如何将基

Java 中如何自定义实现 toString() 方法Java 中如何自定义实现 toString() 方法Apr 27, 2023 pm 02:25 PM

模拟实现tostring函数publicstaticStringmyToString(int[]array){Stringstr="[";for(inti=0;i

如何在Java中使用toString()方法打印数组?如何在Java中使用toString()方法打印数组?May 09, 2023 am 10:01 AM

1.说明作用一可以转换为字符串作用二可以将数值转换为不同的进制数的字符串(八进制十进制等)2.语法StringtoString()staticStringtoString(inti)3.参数i--要转换的整数。4.返回值toString():返回表示Integer值的String对象。toString(inti):返回表示指定int的String对象。5.实例importjava.util.Arrays;publicclassArrayPrint{publicstaticvoidmain(Str

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

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

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能