V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vevlins
V2EX  ›  前端开发

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

  •  
  •   vevlins · 2018-07-23 16:30:54 +08:00 · 1361 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    3 条回复    2018-07-23 17:00:03 +08:00
    littlewin
        1
    littlewin  
       2018-07-23 16:48:48 +08:00
    这是规范问题,有优先级确保

    引用个知乎老哥的回复吧
    JavaScript 中加号运算符的类型转换优先级是什么? - zenoven 的回答 - 知乎
    https://www.zhihu.com/question/21484710/answer/52389636
    vevlins
        2
    vevlins  
    OP
       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
        3
    precisi0nux  
       2018-07-23 17:00:03 +08:00 via iPhone
    Jsfuck 了解一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:18 · PVG 15:18 · LAX 23:18 · JFK 02:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.