解释以下表达式的结果:[] + {}、{} + []、true + true + "1"
[] + {} // '' + '[object Object]' = '[object Object]'
{} + [] // 0 (注意:{} 被解析为代码块,实际执行 +[] → 0)
true + true + '1' // '21' (true+true=2, 2+'1'='21')逐个分析
1. [] + {}
+运算符:左右都转原始类型[]→ToPrimitive('default')→toString()→''{}→ToPrimitive('default')→toString()→'[object Object]''' + '[object Object]'='[object Object]'
2. {} + []
- 在语句开头
{}被解析为代码块(空块),不是对象字面量 - 实际执行的是
+[](一元正号) []→''→0- 结果:
0 - 如果用括号
({}) + []则结果为'[object Object]'
3. true + true + '1'
- 从左到右:
true + true→1 + 1=2 2 + '1'→'2' + '1'='21'(数字 + 字符串 → 字符串拼接)
核心规则
+两边有字符串时 → 字符串拼接+两边都是数字/布尔 → 算术加法- 对象参与
+→ 先ToPrimitive转原始类型