valueOf 、toString及隱式轉換
阿新 • • 發佈:2021-01-08
技術標籤:js
共同點
在 JavaScript 中,toString()方法和valueOf()方法,在輸出物件時會自動呼叫
不同點
- 二者並存的情況下,在數值運算中,優先呼叫了valueOf,字串運算中,優先呼叫了toString
<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>
-
返回值型別的差別:
toString 一定將所有內容轉為字串
valueOf 取出物件內部的值,不進行型別轉換
用途的差別:
1. valueOf專用於算數計算和關係運算
2. toString專用於輸出字串
例子
求a()(3)(4) ====> 7
function a () {
let sum = 0;
let result= (a) => {
sum = sum + a;
return result;
}
result.toString = () => {
return sum;
};
return result;
}
隱式轉換
在js中,當運算子在運算時,如果兩邊資料不統一,CPU就無法計算,這時我們編譯器會自動將運算子兩邊的資料做一個數據型別轉換,轉成一樣的資料型別再計算
o 這種無需程式設計師手動轉換,而由編譯器自動轉換的方式就稱為隱式轉換
1+null ====> 1
1+undefinend ===> NaN
Number(undefined) ===> NaN
Number(null) ===> 0
NaN 與任何比較都是不相等的
- 如何使 a 1 && a2 && a==3
a= {
i: 0,
valueOf: () => {
return ++a.i;
}
}
- {} !== {}, [] !== [] 因為是引用型別,存在堆中