我已經測試代碼:why({} + {})=「[object Object] [object Object]」?
{}+{} = NaN;
({}+{}) = "[object Object][object Object]";
爲什麼加入()
變化的結果呢?
我已經測試代碼:why({} + {})=「[object Object] [object Object]」?
{}+{} = NaN;
({}+{}) = "[object Object][object Object]";
爲什麼加入()
變化的結果呢?
{}+{}
是塊後跟一個表達式。第一個{}
是塊(類似於您附加到if
聲明的類型),+{}
是表達式。第一個{}
是一個塊,因爲當解析器正在查找語句並看到{
時,它將其解釋爲塊的打開。那塊空的,什麼都不做。處理完該塊後,解析器將看到+
並將其讀取爲一元文件+
。這將解析器轉換爲處理表達式。在表達式中,{
啓動對象初始值設定項而不是塊,因此{}
是對象初始值設定項。對象初始值設定項創建一個對象,然後+
然後試圖強制一個數字,得到NaN
。
在({}+{})
中,開頭(
將解析器轉換爲期望表達式而不是語句的模式。因此,()
包含兩個對象初始值設定項與二進制值+
(例如,「加法」運算符,它們可以是算術或字符串連接)。二進制+
運算符將嘗試添加或連接,具體取決於其操作數。它將它的操作數強制爲原語,並且在{}
的情況下,它們都成爲字符串"[object Object]"
。所以你最終得到"[object Object][object Object]"
,這是連接它們的結果。
由於含糊不清。 {}
是一個對象,但也是一個塊邊界。沒有()
它被解釋爲後者。
因爲'{}'是一個對象..不是數字.. – Pogrindis