1. 程式人生 > >{}+[]==0,[]+{}=="[object Object]",!+[]==true (複合語句,隱式型別轉換)

{}+[]==0,[]+{}=="[object Object]",!+[]==true (複合語句,隱式型別轉換)

這兩天看到一些題目,很是不解,主要是js基礎還沒過關,挑了兩個我認為比較難懂的型別轉換的題目講解一下。
物件型別轉換這個就不詳細說了,網上一大推,無非就是用到兩個函式:

  1. Object.toString()
  2. Object.valueof()

這裡說一下,Number,String,Boolean在呼叫方法的時候也會轉換成包裝物件。

1、[]+{}=="[object Object]",這個簡單

[]+{} //輸出"[object Object]"
[].toString() //==> ""
{}.toString() // ==> "[object Object]"
""+"[object Object]"
// ==>"[object Object]"

2、{}+[] == 0;這個就有點不解了,其實這個就要說到js的複合語句了,js中{}代表複合語句:

{
    var a = 1;
    a = a+1;
}

這個是一個程式碼塊,也叫複合語句,所以{}+[]其實是這樣運算的:

{};
+[]   //   [].toString()  ==>""  (+"") ==>0

這裡+[]是一個型別轉換,js中+-開頭的的變數會被轉換成Number型別,不是number型別的會轉成NaN,例如:在這裡插入圖片描述

3、!+[]==true 知道+會把字串轉換成Number型別,那麼這個就好理解了

在這裡插入圖片描述

!+[]
等於:
+[] //  ==>0
!0 // ==>true
!+[]+[] 等於:
!+[] //   ==> true
true + [] // ==>true+""==>"true"