隱式強制類型轉換指的是那些隱藏的強制類型轉換,反作用也不是很明顯,事實上,只要本身以爲不夠明顯的強制類型轉換均可以算做隱式強制類型轉換,接下來,此文將會介紹幾種常見的隱式類型轉換。函數
轉換規則:編碼
若是隻有一個操做數是字符串,則將另外一個操做數轉換爲字符串,而後再將兩個字符串拼接起來code
舉例:對象
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'
轉換規則:字符串
舉例:io
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
場景:console
以上的場景中非布爾值會被隱式的強制轉爲布爾值,轉換規則遵循上篇文章的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
相等操做符分爲寬鬆相等==和嚴格相等===,這兩個都用來判斷值是否相等,區別在於在判斷兩邊操做數是否相等時,寬鬆相等容許進行強制類型轉換,而嚴格相等不容許進行強制類型轉換,所以下面只會介紹寬鬆相等在比較時的強制類型轉換
轉換規則:function
舉例:class
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
比較操做符包括小於(<)、大於(>)、小於等於(<=)、和大於等於(>=)
轉換規則:
舉例:
console.log('11' < 3) // false console.log(true < 2) // true const h = { valueOf: function () { return '22' } } console.log(h > 1) // true
這篇文章對JS中的常見隱式強制類型轉換作了一個小結,但願能對你們理解有所幫助。若是有錯誤或不嚴謹的地方,歡迎批評指正,若是喜歡,歡迎點贊