一、基本類型 :
(1)加號運算符
存在加號運算符的時候窗骑,其他類型都會轉為 String
(2)其他運算符
存在運算符(-,*,/,%)時, 基本類型都轉換為 Number
(3)“==”運算符(兩個操作數(shù)的類型不相同時)
如果一個值是null漆枚,另一個值是undefined创译,則它們相等
如果一個值是數(shù)字,另一個值是字符串墙基,先將字符串轉換為數(shù)字软族,然后使用轉換后的值進行比較
如果其中一個值是true,則將其轉換為1再進行比較残制。如果其中的一個值是false立砸,則將其轉換為0再進行比較
如果一個值是對象,另一個值是數(shù)字或字符串初茶,則將對象轉換為原始值颗祝,再進行比較
(4)注意
undefined轉化為Number是 為’NaN‘
String類型的帶有字符的比如: '1a' ,'a1' 轉化為 Number是 為’NaN‘
任何Number與NaN相加都為NaN
NaN 不與 任何值相等 包括自身,所以判斷一個值 是否為 NaN恼布, 即用 "!==" 即可
轉換為 Boolean類型為 false 的有:null螺戳,0,''折汞,undefined倔幼,NaN,false
number() 與 parseInt() 都可以將對象轉化為Number類型字支,Number函數(shù)要比parseInt函數(shù)嚴格很多凤藏。基本上堕伪,只要有一個字符無法轉成數(shù)值揖庄,整個字符串就會被轉為NaN。
二欠雌、object類型
(1)當object與基本類型運算時:
Number類型會先調用valueOf(), String類型會先調用toString(), 如果結果是原始值蹄梢,則返回原始值,否則繼續(xù)用toString 或 valueOf(),繼續(xù)計算,如果結果還不是原始值禁炒,則拋出一個類型錯誤;
為什么 {} + [] = 0 ? 因為 javascript在運行時, 將 第一次{} 認為是空的代碼塊而咆,所以就相當于 +[] = 0. 還有 {} +5 = 5, 同理
三、練習
console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);
分析:
Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0