哪些操做能致使類型轉換呢javascript
爲 false 的值 -> false undefined null 0 '' NaNjava
常見的運算符 + - * /+
比較特殊除了相加以外 還有字符串拼接的含義code
1)數字和非字符串相加對象
1 + null -> 0; // undefined 比較特殊 表示未定義的,不是一個數字 1 + undefined -> NaN // 會把空對象轉換成數字,若是轉換不成數字就變成字符串拼接 1 + {} -> 1[object object]
2)非數字相加ip
// 把兩邊都轉化成數字 true + true -> 2 // 若是有一方是字符串,則進行字符串拼接 true + {} -> true[object object]
對象的原型鏈上有 valueOf 和 toString 兩個方法原型鏈
let obj = { symbol[toPrimitive](){ return 500 }, valueOf(){ return 100 }, toString(){ return 200 } } // 兩邊都轉換成數字 obj 先調用 valueOf valueOf 若是返回不是數字 則繼續調用 toString 方法 true + obj -> 101
symbol[toPrimitive]
是對象內置屬性,當一個對象要轉換成對應的原始類型時,會調用此方法。字符串
總結下,當對象要進行類型轉換時,會依次調用 symbol[toPrimitive]
valueOf
toString
原型
+
-
和 !
同樣,能夠放在變量前面,進行快速類型轉換it
1 + +'1234' -> 1235 1 + '1234' -> '11234'
1)數字和數字直接比較console
2)字符串比較
// 字符串和字符串,比較的是 AscII 碼 console.log('a'.charCodeAt(0)) console.log('b'.charCodeAt(0)) 'a' < 'b' -> true 'a' < 'bdede' -> true // 同樣的由於比的是第一位 // 數字和字符串相比,字符串先轉化成數字,若是轉化不成數字 這比較始終返回 false 1 < '123' -> true 1 < '1df' -> false // 若是是對象和字符串相比,須要把對象先轉化成基本類型(字符串以後再比較) [] == '' -> true // [].valueOf 爲[],繼續調用 [].toString 爲 '',比較返回 true
3) == 比較
若是一方是數字,會先把另外一方轉換成數字 而後比較
若果其中一方是 boolean 類型 會把 boolean 類型轉換爲數字
null == undefined // true
null、undefined 和任何類型相比 ==
都返回 false
NaN 和任何類型相比返回 false 包括它自己
console.log([] == ![]); // [] == false 單目運算優先級最高 爲 false 的狀況 false undefined NaN null 0 '' // [] == 0 [].valueOf() -> [] 不是原始類型繼續調用 toSting // [] == 0 [].toString() -> '' // '' == 0 Number('') // 0 == 0 true
(完)