標籤:轉換 ebe == console 邏輯 一個 stack topic flow
//連結:http://cnodejs.org/topic/580743a627a1d99178a98fc5
1.求輸出:
([]+![])[+!![]] //a
2.求輸出//評論裡的問題 同計算了
((-{})+[])[+![]]//N
解析:
//雖然平時沒看到有這麼用的 代碼裡這麼寫的要麼是瘋子 要麼是奇葩。。
看題目1 涉及到類型轉換
空數組 轉換成 數字 對應的是 0
空數組 轉換成 布爾 對應的是 true
。。。。
任意值轉換成數位 隱式方法 -somevalue +somevalue(not somevalue+somevalue)
其中 不可parseInt或者paresFloat的值會成為NaN
所以題目1 轉換
[]+![]
首先執行![] 轉換成布爾值 false
[]+布爾 統一變成 [].toString()+"false";
[]對應字串是“”
所以變成false
[+!![]]
[] 對應的布爾值是 true
!是邏輯符號 非 所以![] ,[]轉換成布爾值true,![] 就是false。
!![]就是true。
+true 轉換成數字 true對應數字1
題目一最後執行:("false")[1] 對應是輸出a。
然後就會很糾結一個問題
[] 是神馬情況
[] 對應 true ??
[] 對應 0
wtf..
var arr = [];
//於是提問的人 又拋了一個問題。。。(後來發現是stackoverflow上的。。)
console.log(‘Array:‘, arr);
if (arr) console.log("It‘s true!");
if (arr == false) console.log("It‘s false!");
if (arr && arr == false) console.log("...what??");
在進行轉換過程
比如 目標類型是布爾 會進行Boolean(source);
目標類型是 數字 會進行Number(source);
object 類型會變成true
至於數字
建議閱讀ES 規範
Number([]);
Number([1]);
Numeber([1,2]);
Number({});傳入object
js題集28