javascript 中“~”这个符号是什么意思

2015-02-09 08:48:39 +08:00
 ufo22940268
https://github.com/lapwinglabs/x-ray/blob/master/lib/utils/absolute-urls.js#L41

这里面看到的,google也找不到,多谢各位
3600 次点击
所在节点    问与答
12 条回复
ffffwh
2015-02-09 08:57:45 +08:00
按位取补
二进制:~01011010=10100101
一般情况下(有符号补码):~a + 1 = -a
那句话换成人话:if (src.indexOf('://') < 1) {
yyfearth
2015-02-09 09:00:55 +08:00
二进制 非 Bitwise NOT

~-1 -> 0
所以相当于 if (~src.indexOf('://')) -> if (src.indexOf('://') !== -1)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT
yyfearth
2015-02-09 09:05:35 +08:00
@ffffwh 你的意思是对的 但是最后那个不对
if (~src.indexOf('://')) 相当于 if (~src.indexOf('://') != 0/null/NaN/...) 相当于 if (src.indexOf('://') !== -1)
tabris17
2015-02-09 09:08:14 +08:00
按位取反,和C一样
ffffwh
2015-02-09 09:08:29 +08:00
@ffffwh
我说错,二楼正解。JS只有if (1)才判断成功。
建议if里面一律放bool值。
xudshen
2015-02-09 09:12:36 +08:00
~哦~
yyfearth
2015-02-09 09:22:07 +08:00
@ffffwh 不是哦 JS 里面 if 非0 (或者和0等价的null undefined NaN) 就相当于 true 不一定是1
其实大家在用的时候并不一定是给bool 不过因此确实比较容易出bug

indexOf 正常返回 >=0 找不到返回 -1 所以必须判断是否是-1 而不是 0 或者 1
而刚好 ~-1 === 0 算是一个小技巧吧 其实在团队中不太推荐用 因为会有人看不懂
另外一个类似的用法是 ~~float 或者 float | 0 相当于 Math.floor(float)
ZackYang
2015-02-09 09:48:02 +08:00
@yyfearth ~~float, 已醉...
linzy
2015-02-09 10:00:25 +08:00
醉了
FrankFang128
2015-02-09 13:06:54 +08:00
这么写代码真是2
yellowV2ex
2015-02-09 13:18:19 +08:00
我很认真的问一下,如果我这么写到代码里,if (~src.indexOf('://')) {
那么看到的人会以为我很牛逼还是很装逼?
iyaozhen
2015-02-09 13:45:28 +08:00
@yellowV2ex 感觉这样更简洁。src.indexOf('://') !== -1 太长了

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

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

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

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

© 2021 V2EX