1. 程式人生 > >JS中toString()和valueOf()的用法及兩者的區別

JS中toString()和valueOf()的用法及兩者的區別

基本上,所有JS資料型別都擁有valueOf和toString這兩個方法,null除外。它們倆解決javascript值運算與顯示的問題。

1.用法如下:

toString()方法:返回物件的字串表示。

 

物件 操作
Array 將 Array 的元素轉換為字串。結果字串由逗號分隔,且連線起來。
Boolean 如果 Boolean 值是 true,則返回 “true”。否則,返回 “false”。
Date 返回日期的文字表示法。
Error 返回一個包含相關錯誤訊息的字串。
Function 返回如下格式的字串,其中 functionname 是被呼叫 toString 方法函式的名稱:
function functionname( ) { [native code] }
Number 返回數字的文字表示。
String 返回 String 物件的值。
預設 返回 “[object objectname]”,其中 objectname 是物件型別的名稱。

 

valueOf()方法:返回指定物件的原始值。

 

物件 返回值
Array 陣列的元素被轉換為字串,這些字串由逗號分隔,連線在一起。其操作與 Array.toString 和 Array.join方法相同。
Boolean Boolean 值。
Date 儲存的時間是從 1970 年 1 月 1 日午夜開始計的毫秒數 UTC
Function 函式本身。
Number 數字值。
Object 物件本身。這是預設情況。
String 字串值。

 

2.兩者的共同點與不同點:

共同點:在 JavaScript 中,toString()方法和valueOf()方法,在輸出物件時會自動呼叫。

不同點:二者並存的情況下,在數值運算中,優先呼叫了valueOf,字串運算中,優先呼叫了toString。

例子1如下:

<script>
 var obj = {};
 obj.valueOf = function()
 {
 return 10;
 }
 obj.toString = function()
 {
 return "return value";
 }
 var result = obj + 1; //var result = obj.valueOf() + 1;
 alert(result);
 alert(obj); //alert(obj.toString());
</script>

例子2如下:

function obj()
 { }
 obj.prototype.toString = function(){  return 'dfsf';

 };
 obj.prototype.valueOf = function(){
  return '3333';
 };
 var e = new obj();
 var o = new obj();
 alert(o);//alert(obj.toString())
 alert(o+e);//alert(obj.valueOf()+obj.valueOf())
</script>


返回值型別的差別:  ****toString vs valueOf的差別:

              1. toString一定將所有內容轉為字串

              2. valueOf取出物件內部的值,不進行型別轉換

用途的差別:

              1. valueOf專用於算數計算和關係運算

              2. toString專用於輸出字串

共同的缺點:無法獲取null和undefined的值