1. 程式人生 > >js題集28

js題集28

布爾值 log 執行 ber number topic 建議 閱讀 parseint

//鏈接: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