1. 程式人生 > 其它 >valueOf 、toString及隱式轉換

valueOf 、toString及隱式轉換

技術標籤:js

共同點

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

不同點

  1. 二者並存的情況下,在數值運算中,優先呼叫了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>
  1. 返回值型別的差別:

    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
與任何比較都是不相等的
  1. 如何使 a 1 && a2 && a==3
a= {
	i: 0,
	valueOf: () => {
		return ++a.i;
	}
}
  1. {} !== {}, [] !== [] 因為是引用型別,存在堆中