2013-08-29 59 views

回答

15

在瀏覽器的控制檯,當它不是由=(或改變其上下文一些其他代碼)之前,{}被視爲,而不是一個對象常量。

由於塊是空的,它什麼也不做,只剩下+ []

一元加運算符將數組轉換爲數字,即0

+1

確實,嘗試'({} + [])'。我不知道我可以在沒有'if/else/do/while/function/etc'的情況下使用'{}'。 – biziclop

1

對操作對象使用操作符時,javascript解釋器應該使用valueOf方法將值轉換爲原始值,該方法實際上使用內部ToPrimitive函數中繼類型強制轉換爲對象的內部[[DefaultValue]]方法。

你的加運算符的例子有點棘手,因爲運算符可以作爲數學加法或字符串連接。在這種情況下,它會連接對象的字符串表示形式。

什麼是真正發生在幕後是:

a = {}.valueOf().toString() + [].valueOf().toString(); 

由於數組是空的toString方法返回一個空字符串,這就是爲什麼正確的結果應該是[對象的對象]這是從返回值object.valueOf()的toString()。

相關問題