1. 程式人生 > >js中關於!+[]+[]如何進行計算

js中關於!+[]+[]如何進行計算

前幾天朋友問了我一個問題,(!+[]+[]).length 得什麼,我一時間還真沒反應過來,後來百度查了資料才知道了是如何計算的,控制檯輸入得到如下:

首先js是弱型別語言,所以導致js的隱式型別轉換頻繁。

js裡隱式轉換的規則為:

  1. 如果其中有一個運算元為string,則將另一個運算元隱式的轉換為string,然後進行字串拼接得出結果。 
  2. 如果運算元為物件({})或者是陣列([])這種複雜的資料型別,那麼就將兩個運算元都轉換為字串,進行拼接 
    //[]進行字串轉換得到結果為""
    String([]) //""
    
    //{}進行字串轉換得到結果為"[object Object]"
    String({}) //"[object Object]"

  3. 如果運算元是像boolean這種的簡單資料型別,那麼就將運算元轉換為number相加得出結果

先計算!+[],按照 規則把[]轉換為了"",相當於計算!+"",結果為!"",!""= true。在計算後邊+[],等價於true+[],也就是true+""='true'

最後字串'true'.length = 4 

這裡可以得出,當boolean這種資料型別和[]陣列型別用+連線的時候,是直接把雙方轉化為了string型別,然後進行了字串拼接。

兩個boolean型別用+連線的時候,才是都轉化為number型別相加得出結果。