{}+[]==0,[]+{}=="[object Object]",!+[]==true (複合語句,隱式型別轉換)
阿新 • • 發佈:2019-01-22
這兩天看到一些題目,很是不解,主要是js基礎還沒過關,挑了兩個我認為比較難懂的型別轉換的題目講解一下。
物件型別轉換這個就不詳細說了,網上一大推,無非就是用到兩個函式:
- Object.toString()
- 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"