顯式類型轉換
1,Number()
- 數字即自己。
- 字符串,若是是純數字,則直接轉化爲數字;若是不是純數字,則轉換爲NaN;若是是空字符串,則轉化爲0;
- 布爾值,true轉化爲1;false轉化爲0;
- undefined轉化爲NaN
- null轉化爲0
- 先調用對象的valueOf()方法,若是返回的是基本數據類型,則調用Number()方法,結束。
- 先調用對象的valueOf()方法,若是返回的是複合數據類型,則繼續調用toString()方法,這時若是返回的是基本數據類型,則調用Number()方法,結束。
- 先調用對象的valueOf()方法,若是返回的是複合數據類型,則繼續調用toString()方法,這時若是返回的不是基本數據類型,則報錯。
2,String()
- 數字轉化爲字符串。
- 字符串爲自己。
- 布爾值,true轉化爲'true';false轉化爲'false';
- undefined 轉化爲 'undefined';
- null 轉化爲 'null';
- 先調用對象的toString()方法,若是返回的是基本數據類型,則調用String()方法,結束。
- 先調用對象的toString()方法,若是返回的是複合數據類型,則繼續調用對象的valueOf()方法,這時若是返回的是基本數據類型,則調用String()方法,結束。
- 先嗲用對象的toString()方法,若是返回的是複合數據類型,則繼續調用對象的valueOf()方法,這時若是返回的不是基本數據類型,則報錯。
3,Boolean()
只需記得幾項爲false的值,其餘都爲true。node
- +0
- -0
- ''
- false
- NaN
- undefined
- null
隱式類型轉換
- 若是是加法和字符串同時出現時,會成爲字符串拼接。
- 若是是其餘狀況的+-*/,則將不是number類型的數據經過Number()轉化,轉化完成再進行數學運算。
- 出現不一樣類型的數據比較,將不是number類型的數據經過Number()轉換,再進行判斷。
- 特別注意:undefined == null 返回的是true
- 將全部判斷語句內的結果進行Boolean()轉化。
- 三目運算符
- &&,將兩邊的數據進行Boolean()轉換,返回從左往右第一個false的值。若是全爲true,則返回最後一個值。
- ||,將兩邊的數據進行Boolean()轉換,返回從左往右第一個true的值,若是全爲false,則返回最後一個值。
- console.log()會將輸入調用String()方法,返回字符串。
- alert()會將輸入調用String()方法,返回字符串。
常見題目
- [] + [] //''
- [] + {} //"[object Object]"
- {} + [] //0,這裏將{}當作了空代碼塊,直接無視了,變成+[]
- {} + {} //這裏的答案在chrome和firefox中的執行結果不一樣,firefox會將前面的{}當作空代碼塊,並沒有視它成爲+{},值爲NaN;在chrome中執行,值爲"[object Object][object Object]",(具資料顯示,chrome用的是eval()方法進行解讀的。nodejs環境中值爲"[object Object][object Object]")
- true + true //2
- 1 + {a:1} //"1[object Object]"
- undefined == null //true