隱式強制類型轉換指的是那些隱藏的強制類型轉換,反作用也不是很明顯,事實上,只要本身以爲不夠明顯的強制類型轉換均可以算做隱式強制類型轉換,接下來,此文將會介紹幾種常見的隱式類型轉換。函數
轉換規則:ui
舉例:編碼
console.log(1 + true) // 2
console.log('1' + '1') // '11'
console.log(1 + '1') // '11'
console.log('1' + 'true') // '1true'
var a = {
valueOf: function() {
return 2
},
toString: function() {
return 1
}
}
var b = {b: 1}
console.log(a + '1') // '21'
console.log(b + '1') // '[object Object]1'
複製代碼
轉換規則:spa
舉例:code
console.log(5 - '1') // 4
console.log(5 - true) // 4
console.log(5 - null) // 5
console.log(5- undefined) // NaN
const c = {
valueOf: function() {
return '1'
}
}
console.log(5 - c) // 4
複製代碼
場景:對象
以上的場景中非布爾值會被隱式的強制轉爲布爾值,轉換規則遵循上篇文章的ToBoolean轉換規則
舉例:字符串
const d = 11
const e = null
let f
const g = f ? d : e
console.log(g) // null
console.log(d && e) // null
console.log(d || e) // 11
複製代碼
相等操做符分爲寬鬆相等==和嚴格相等===,這兩個都用來判斷值是否相等,區別在於在判斷兩邊操做數是否相等時,寬鬆相等容許進行強制類型轉換,而嚴格相等不容許進行強制類型轉換,所以下面只會介紹寬鬆相等在比較時的強制類型轉換
轉換規則:string
舉例:it
console.log(null == undefined) // true
console.log('NaN' == NaN) // false
console.log(5 == NaN) // false
console.log(NaN == NaN) // false
console.log(NaN != NaN) // true
console.log(false == 0) // true
console.log(true == 1) // true
console.log(true == 2) // false
console.log(undefined == 0) // false
console.log(null == 0) // false
console.log('5' == 5) // true
複製代碼
比較操做符包括小於(<)、大於(>)、小於等於(<=)、和大於等於(>=) 轉換規則:io
舉例:
console.log('11' < 3) // false
console.log(true < 2) // true
const h = {
valueOf: function () {
return '22'
}
}
console.log(h > 1) // true
複製代碼
這篇文章對JS中的常見隱式強制類型轉換作了一個小結,但願能對你們理解有所幫助。若是有錯誤或不嚴謹的地方,歡迎批評指正,若是喜歡,歡迎點贊