在 Javascript 中,({}+{}).length返回 30 而({}+{}+{}*2).length返回 33。我希望对这种行为进行可访问的教学解释。
const a = {}+{};
const b = {}+{}+{}*2;
console.log('({}+{}) =', a, a.length);
console.log('({}+{}+{}*2) =', b, b.length);Run Code Online (Sandbox Code Playgroud)
+,当任一操作数不是数字时,将连接两个操作数的字符串版本。so{}+{}会变成{}两边的字符串,并将它们连接在一起。您将[object Object]连接[object Object]30 个字符长的 。
+从左到右操作,并且*具有更高的运算符优先级。所以
({}+{}+{}*2).length
Run Code Online (Sandbox Code Playgroud)
相当于:
({}+{}+{}*2).length
({}+{}+({}*2)).length
(({}+{})+({}*2)).length
(({}+{} )+({}*2)).length // same as above, but spaced out
(('[object Object][object Object]')+({}*2)).length
Run Code Online (Sandbox Code Playgroud)
的{} * 2到乘法东西尝试不能有意义地转换为数字,因此NaN是结果:
(('[object Object][object Object]')+({}*2)).length
(('[object Object][object Object]')+(NaN )).length
('[object Object][object Object]' + NaN).length
Run Code Online (Sandbox Code Playgroud)
+ 当任一侧是字符串时将连接,所以你得到:
'[object Object][object Object]NaN'.length
Run Code Online (Sandbox Code Playgroud)
这是 33。
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |