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

2018-09-21 21:40:50 +08:00
 pkookp8
console.log(1|2) //3
console.log(2|1+"sgdj") //2
console.log(2|1+"\n") //3
第一个是位运算,能理解
求解后面两个为什么是 2 和 3
$ node -v
v8.11.2
1237 次点击
所在节点    问与答
4 条回复
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
2018-09-21 22:04:17 +08:00
@laobubu #1 (1+"sgdj") 应该说是不能转换为数字,只能得到个 NaN,然后根据 toInt32 的规则,NaN 就当作 0 参与位运算了
azh7138m
2018-09-21 22:08:29 +08:00
"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
2018-09-21 22:08:56 +08:00
哎呀,前面的老哥速度这么快的。。。

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

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

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

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

© 2021 V2EX