为什么{}+[]
会把{}
解释为一个语句块,所以{}+[]
被 js 引擎视为{};+[]
所以等于0
。如果按照这种方式,{}+{}
应该是{};+{}
最终结果是NaN
。
为什么{}+{}
的结果是把两个都通过toString()
转换了呢?
1
littlewin 2018-07-23 16:48:48 +08:00
这是规范问题,有优先级确保
引用个知乎老哥的回复吧 JavaScript 中加号运算符的类型转换优先级是什么? - zenoven 的回答 - 知乎 https://www.zhihu.com/question/21484710/answer/52389636 |
2
vevlins OP @littlewin 隐式转化的问题我是明白的,这里{}何种情况下被解释语法块我是比较混淆的。我在回答中的参考资料中找到了 Axel Rauschmayer 的说法,在 nodejs 中和浏览器中{}的解释是不同的。
经过测试: nodejsv8.9.0 和 chromev67.0.3396.99 表现相同,应该是 v8 引擎的原因: + {}+{} =>'[object Object][object Object]' + {}+[]=>0 firefoxv61.0.1: + {}+{}=>NaN + {}+[]=>0 |
3
precisi0nux 2018-07-23 17:00:03 +08:00 via iPhone
Jsfuck 了解一下
|