{}+{} 和 {}+[],js 隐式转换问题?

2018-07-23 16:30:54 +08:00
 vevlins

为什么{}+[]会把{}解释为一个语句块,所以{}+[]被 js 引擎视为{};+[]所以等于0。如果按照这种方式,{}+{}应该是{};+{}最终结果是NaN

为什么{}+{}的结果是把两个都通过toString()转换了呢?

1387 次点击
所在节点    前端开发
3 条回复
littlewin
2018-07-23 16:48:48 +08:00
这是规范问题,有优先级确保

引用个知乎老哥的回复吧
JavaScript 中加号运算符的类型转换优先级是什么? - zenoven 的回答 - 知乎
https://www.zhihu.com/question/21484710/answer/52389636
vevlins
2018-07-23 16:59:54 +08:00
@littlewin 隐式转化的问题我是明白的,这里{}何种情况下被解释语法块我是比较混淆的。我在回答中的参考资料中找到了 Axel Rauschmayer 的说法,在 nodejs 中和浏览器中{}的解释是不同的。
经过测试:
nodejsv8.9.0 和 chromev67.0.3396.99 表现相同,应该是 v8 引擎的原因:
+ {}+{} =>'[object Object][object Object]'
+ {}+[]=>0

firefoxv61.0.1:
+ {}+{}=>NaN
+ {}+[]=>0
precisi0nux
2018-07-23 17:00:03 +08:00
Jsfuck 了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/473367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX