不同類型的變量比較要先轉類型,叫做類型轉換,類型轉換也叫隱式轉換。隱式轉換通常發生在運算符加減乘除、等於、還有小於、大於等。js隱式轉換,可以說是一個很大的坑了,下面就來侃一侃js隱式轉換的規律。
1. ==隱式轉換
如圖,js在隱式轉換(==)的時候,會按圖示進行轉換:
關於==隱式轉換的規則,可以概括如下幾點:
1. 字符串和數字比較時,字符串轉數字;
2. 數字爲布爾比較時,布爾轉數字;
3. 字符串和布爾比較時,兩者轉數字;
4. 對象和布爾比較時,兩者轉數字;
5. 對象和數值比較時,對象轉數字;
舉個例子:
[1,2,3] == '1,2,3' //true [1,2,3]轉化爲'1,2,3',故結果爲true;
'0' == true; //false '0'轉換成數字0,true轉換成數字1,故結果爲false
特殊情況:
1. undefined==null;
2. 只有undefined、null、NaN、0、‘’會被轉換爲false,其餘都爲true;
3. NaN和任何值都不相等, 包括NaN本身;
4. null和undefined在進行比較的時候,不會進行類型轉換。
即:0 == null //false;
0 == undefined //false;
false == null //false;
false == undefined //false;
true == null //false;
true == undefined //false;
'' == null //false;
'' == undefined //false;
2. 算數運算
轉換規則:
1. 字符串加數字(或數字加字符串),數字就會轉成字符串。
2. 數字減字符串(或字符串減數字,或字符串減字符串),字符串轉成數字。如果字符串不是純數字就會轉成NaN。
3. 乘、除、大於、小於跟減的轉換也是一樣。
舉個例子:
console.log(10 +'20') //1020
console.log(10 - '20') //-10 number
console.log(10 - 'one') //NaN
console.log(10 - '101a') //NaN
console.log(10 * '20') //200 number
console.log('10' * '20') //200 number
console.log(20 / '10') //2 number
console.log('20' / '10') //2 number
console.log('20' / 'one') //NaN
參考鏈接:https://www.cnblogs.com/chenmeng0818/p/5954215.html
https://blog.csdn.net/sinat_29454619/article/details/74075216