把其他數據類型轉化爲number類型
發生的情況:
(1)isNaN:調用Number方法
(2)parseInt、parseFloat、Number
(3)數學運算:+ - * / %
(4)基於“==”比較的時候,有時候也會把其他值轉化爲數字類型的值轉化爲數字類型
轉換規律:
布爾類型的值
true: 1,
false: 0
null: 0,
undefined: NaN
字符串類型的值: 如果有非數字字符(會忽略空格),則返回NaN, 其中要考慮一些特殊字符,比如空格、換行符、製表符等
Number()
引用數據類型的值,需要先調用toString方法轉化爲字符串類型
其他數據類型轉化爲字符串
發生的情況:
1、基於alert、confirm、prompt、document.write
2、基於+進行字符串拼接的時候
3、把引用值轉化爲數字的時候,先轉化爲字符串
4、給對象設置屬性名,如果不是字符串,則先轉換爲字符串
5、手動調用toString、toFixed、join、String的時候
轉化規律:
瀏覽器默認轉化,調用的都是toString方法
把其他數據類型轉化爲布爾值
發生的情況:
1、!、!!、Boolean
2、判斷中的條件
轉化規律:
null undefined 空字符串"" NaN 0轉化後是false, 其他情況都是true
常見隱式數據類型轉換
+
如果表達式中出現字符串,就是字符串拼接,否則就是數學運算
1+ true; // 2
'1'+true; // '1true'
[12] + '10'; // '1210' //雖然表面沒有字符串,但是轉換過程中會先轉換爲字符串,所以最終是字符串拼接
({}) + 10. // '[object Object]10'
{} + 10; // 10. 這和數據類型轉換沒有任何關係,這是代碼塊的含義
{} + {}; // '[object Object][object Object]'
10+ true + false + null +undefined + 'zhang' + 'null' + undefined + [] +'false;
// => NaNzhangnullundefinedfalse
==
相同數據類型比較就不在講述
不同數據類型,會先轉換爲相同的數據類型才能比較:
對象 == 對象: 比較的是對象的地址,地址相同返回true,地址不同返回false
對象 == 數字: 先轉換爲數字
對象 == 字符串: 先轉換爲數字
對象 == 布爾: 先轉換爲數字
字符串 == 數字: 先轉換爲數字
字符串 == 布爾: 先轉換爲數字
布爾 == 數字: 先轉換爲數字
null == undefined: true
null === undefined: false
這兩個值和其他所有值都不相等
NaN==NaN : false, NaN和誰都不相等, 包括自身
1 == true; // => true
2 == true; // => false; true先轉化爲1, 進行比價,結果爲false
[]==[]; // => false
[] == false; // => true; 都轉化爲數字,都是0
[] == true; // => false
![] == false; // false; !先轉化爲布爾值,爲true, 在判斷true==false
![] == true; // true
![] == []; // true