JS不同運算符下隱式類型轉換的實現(xiàn)示例
js是動態(tài)類型語言也稱弱類型,在編寫代碼時,即在做計算的值類型不一樣會做隱式類型轉換。
console.log(1 + '2') // '12' console.log('1' == true) // true console.log('1' == 1) // true console.log(true && 2) // 2 console.log(undefined == null) // true console.log('3' * 2) // 6 console.log([1] + 1) // '11'
運算符
邏輯運算符(&&、||、!)和 條件表達式(if、三元表達式)
邏輯運算符和條件表達式會將值隱式轉換成Boolean
轉Boolean
- Boolean(1) // true
- Boolean('1') // true
- Boolean(true) // true
- Boolean(null) // false
- Boolean(undefined) // false
- Boolean([]) // true
- Boolean({}) // true
- Boolean(NaN) // false
邏輯運算符
console.log(1 && 2) // 隱式轉換 Boolean(1) && Boolean(2) //如果都為true則返回最后為true的值,如果有一個false則返回false, 輸出2 console.log(1 || false) // Boolean(1) && false //返回第一個隱式轉換為true的值, 輸出1 console.log(!3) // !Boolean(3) //將3隱式轉換成Boolean類型的值再取反,輸出false
條件表達式
if(3) // 隱式轉換 Boolean(3) if(undefined) // Boolean(undefined) if(null) // Boolean(null) 3 ? 2 : 1 // Boolean(3), 為true, 輸出2 4 && undefined ? 2 : 1 // Boolean(undefined), 為true 輸出1
算數(shù)運算符(*、/、- %、+)和 關系運算符(>、<、==、!=)
算數(shù)運算符和條件表達式會將值隱式轉換成Number,但是+法運算符有些特殊的規(guī)則
轉換規(guī)則
基本數(shù)據(jù)類型的值轉Number
- Number(1) // 1
- Number('1') // 1
- Number(true) // 1
- Number(null) // 0
- Number(undefined) // NaN
- Number(NaN) // NaN
- Number(Symbol(1)) // 報錯
復雜數(shù)據(jù)類型轉Number
const obj = { valueOf: function() { return 42; } };
- Number({}) // NaN
- Number([1]) // 1
- Number(obj) // 42
1:js會判斷該值的原始值(valueOf)是不是基本數(shù)據(jù)類型,如果是,轉換其為Number,如果不是則按如下轉換規(guī)則。
2: 將Object轉換成String,再轉換成Number。
算數(shù)運算符
+法運算符
運算結果要不是數(shù)字,要不是字符串,要不是NaN
做+法運算的時候,當任何非String類型值和String做運算,則會將其轉換成String,再拼接字符串
console.log(1 + 1) // 2 console.log(1 + true) // 2 console.log(1 + false) // 1 console.log(true + false) // 1 console.log(1 + '1') // '11' console.log(1 + undefined) // NaN console.log([1] + '1') // '11',先將[1]轉換成數(shù)字1,此時變成了 1 + '1',做字符串拼接'11'
-、*、/、%法運算符
運算結果要不是數(shù)字,要不是NaN
console.log(1 * 1) // 1 console.log(1 - true) // 0 console.log([2] * '1') // 2 console.log([2] / '1') // 2 console.log([2] % '1') // 0 console.log([2] * '1a') // NaN
關系運算符
運算結果總是布爾
console.log(1 == 1) // true console.log(1 == true) // true console.log(1 == false) // false console.log(true == false) // false console.log(['32'] > 22) // true console.log(NaN == NaN) // flase
到此這篇關于JS不同運算符下隱式類型轉換的實現(xiàn)示例的文章就介紹到這了,更多相關JS 隱式類型轉換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Bootstrap 表單驗證formValidation 實現(xiàn)表單動態(tài)驗證功能
這篇文章主要介紹了Bootstrap 表單驗證formValidation 實現(xiàn)表單動態(tài)驗證功能,需要的朋友可以參考下2017-05-05