2017-08-01 26 views
3

一定量時,可以說是不合邏輯或嘲笑,某種程度上我可以讓我的周圍JS結果像頭:爲什麼3 [4,2]在JS中評估爲undefined?

// Coercing to string and concatenating 
3 + [4,2] 
'34,2' 

// Coercing and doing proper math 
4 - [2] 
2 

// Or failing miserably 
3 - [4,2] 
NaN 

但是爲什麼3[4,2]評估爲undefined?至少在上面的例子中有操作執行(東西正在完成)。在一個相關的說明,諷刺地[4,2]3產生SyntaxError: Unexpected number錯誤。

這裏發生了什麼?

上下文:花了早晨發現和擠壓其中,(逗號)從數字和嵌套數組的混合的陣列丟失了一個錯誤:[1, 2, 3 [4, 2], 5, [8], 7]

+2

理解。正如在最後一句中所解釋的,我有一個數組聲明中缺少逗號的錯誤。 –

回答

8

表達

3[4,2] 

被評價爲

(new Number(3))[4, 2] 

屬性查找操作。 4,2表達式是逗號運算符的一個示例,其值是子表達式列表2中的最後一個。

由運行時創建的Number實例沒有名爲「2」的屬性,因此結果爲undefined

該語言對待.[]運算符幾乎相同,但.與數字文字的符號語法糾結在一起。將左側轉換爲對象(如果可能的話;當它是undefined時,您會看到熟悉的「Can not read property foo of undefined」錯誤)。然後獲取屬性值(如果存在)。

因此,例如

3["valueOf"] 

不是undefined:這是給Number.prototype.valueOf函數的引用。

+0

今天學到了新東西。非常感謝你。 –

+1

'(+'4.3445')[4,3,6,7,'toFixed'](2)//'4.34''。得到它了。 –

相關問題