js中關於!+[]+[]如何進行計算
阿新 • • 發佈:2018-12-15
前幾天朋友問了我一個問題,(!+[]+[]).length 得什麼,我一時間還真沒反應過來,後來百度查了資料才知道了是如何計算的,控制檯輸入得到如下:
首先js是弱型別語言,所以導致js的隱式型別轉換頻繁。
js裡隱式轉換的規則為:
- 如果其中有一個運算元為string,則將另一個運算元隱式的轉換為string,然後進行字串拼接得出結果。
- 如果運算元為物件({})或者是陣列([])這種複雜的資料型別,那麼就將兩個運算元都轉換為字串,進行拼接
//[]進行字串轉換得到結果為"" String([]) //"" //{}進行字串轉換得到結果為"[object Object]" String({}) //"[object Object]"
- 如果運算元是像boolean這種的簡單資料型別,那麼就將運算元轉換為number相加得出結果
先計算!+[],按照 規則把[]轉換為了"",相當於計算!+"",結果為!"",!""= true。在計算後邊+[],等價於true+[],也就是true+""='true'
最後字串'true'.length = 4
這裡可以得出,當boolean這種資料型別和[]陣列型別用+連線的時候,是直接把雙方轉化為了string型別,然後進行了字串拼接。
而兩個boolean型別用+連線的時候,才是都轉化為number型別相加得出結果。