在JavaScript中,我們有{} + [] // 0
但是({}+[]) // "[object Object]"
。 據我所知,在第一個例子中,JS解析{}
作爲一個空的塊,所以剩下的+ []
,在這一點上它調用toNumber(toPrimitive([]))
,這是0.但我不明白如何通過添加括號這種變化。括號是否會阻止JS將{}
評估爲空白塊,然後將其轉換爲其原始類型,也就是一個字符串?JavaScript括號對添加期間類型轉換的影響
0
A
回答
1
當添加圓括號改變對以下標記的解析時,JavaScript中有許多情況。函數聲明與函數表達式是另一個例子。
這是一個語法錯誤:
function() {
// stuff
}()
但這是一個IIFE(立即調用的函數表達式):
(function() {
// stuff
})()
在這種情況下,括號導致JavaScript來解釋大括號作爲對象字面值而不是空白塊。當與二元運算符一起使用時,對象被強制轉換爲它們的字符串表示形式。添加字符串時,數組被強制爲空字符串。
{} + {} // "[object Object][object Object]"
'foo' + [] // "foo"
({} + []) // "[object Object]"
括號沒有引起{}
成爲一個字符串,但加號一樣。
+0
在某些情況下,{} + {}'打印'NaN'。它取決於REPL是否選擇將第一個「{}」解析爲對象字面值。 – 4castle
相關問題
- 1. 的Javascript轉換時間括號
- 2. 指針類型轉換:對緩衝區長度的影響?
- 3. 添加不受javascript影響的jQuery值
- 4. 受括號影響的JavaScript中的條件表達式
- 5. Javascript類型轉換
- 6. 的JavaScript類型轉換
- 7. 轉換javascript中的類型
- 8. 圓括號對Python中的'或'運算符有什麼影響?
- 9. 如何添加一個不影響中間對齊的小div?
- 10. 通過添加索引對查詢時間的影響
- 11. 跳轉對PageViewController的影響
- 12. Notepad ++:在時間戳中添加括號
- 13. 類型轉換和類型轉換之間的區別?
- 14. Java to javascript類型轉換
- 15. 將類型轉換爲可轉換類型的對/元組
- 16. Sequelize加入型號包括多對多
- 17. Javascript切換時間類型
- 18. 類型之間轉換
- 19. javascript - 爲什麼在評估對象時添加括號?
- 20. 添加ROW_NUMBER影響彙總
- 21. 從日期時間字符串轉換爲JavaScript日期對象
- 22. JavaScript的日期/時間轉換
- 23. 哪個JavaScript加載選項對頁面加載時間的影響最小?
- 24. 轉換類型中添加的DropDownList類的方法
- 25. Clojure的類型轉換串符號
- 26. c#對象類型轉換
- 27. 對象類型轉換
- 28. 對象類型轉換
- 29. 類成員函數編號的影響
- 30. Java - 將數組類型轉換爲對象類型轉換
添加括號可以將其評估爲對象文字而不是代碼塊。這個技巧用於[ECMAScript6箭頭函數返回一個對象](// stackoverflow.com/q/28770415) – 4castle