JS中toString()和valueOf()的用法及兩者的區別
阿新 • • 發佈:2019-01-12
基本上,所有JS資料型別都擁有valueOf和toString這兩個方法,null除外。它們倆解決javascript值運算與顯示的問題。
1.用法如下:
toString()方法:返回物件的字串表示。
物件 | 操作 |
---|---|
Array | 將 Array 的元素轉換為字串。結果字串由逗號分隔,且連線起來。 |
Boolean | 如果 Boolean 值是 true,則返回 “true”。否則,返回 “false”。 |
Date | 返回日期的文字表示法。 |
Error | 返回一個包含相關錯誤訊息的字串。 |
Function | 返回如下格式的字串,其中 functionname 是被呼叫 toString 方法函式的名稱: |
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的值