V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pkookp8
V2EX  ›  问与答

问一个 js 关于位运算和加法运算的问题

  •  
  •   pkookp8 · 2018-09-21 21:40:50 +08:00 · 1230 次点击
    这是一个创建于 2034 天前的主题,其中的信息可能已经有所发展或是发生改变。
    console.log(1|2) //3
    console.log(2|1+"sgdj") //2
    console.log(2|1+"\n") //3
    第一个是位运算,能理解
    求解后面两个为什么是 2 和 3
    $ node -v
    v8.11.2
    laobubu
        1
    laobubu  
       2018-09-21 22:02:55 +08:00
    console.log(2|(1+"sgdj")) // (1+"sgdj") 不能转换为 Int32
    console.log(2|(1+"\n")) // (1+"\n") 转换为数字的时候,"\n"当空白字符去掉了

    关于字符串转换为数字,可以参考:
    - https://www.ecma-international.org/ecma-262/5.1/#sec-9.5
    - https://www.ecma-international.org/ecma-262/5.1/#sec-9.3
    laobubu
        2
    laobubu  
       2018-09-21 22:04:17 +08:00
    @laobubu #1 (1+"sgdj") 应该说是不能转换为数字,只能得到个 NaN,然后根据 toInt32 的规则,NaN 就当作 0 参与位运算了
    azh7138m
        3
    azh7138m  
       2018-09-21 22:08:29 +08:00 via Android
    "1sgdj"被转换成了 NaN to int32 就是+0
    "1\n"被转换成了 1
    参照
    https://tc39.github.io/ecma262/#sec-binary-bitwise-operators
    https://tc39.github.io/ecma262/#sec-toint32
    azh7138m
        4
    azh7138m  
       2018-09-21 22:08:56 +08:00 via Android
    哎呀,前面的老哥速度这么快的。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3288 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:43 · PVG 21:43 · LAX 06:43 · JFK 09:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.