JavaScript 里 ~ 的神奇用法

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

这几天看koa源码的时候,经常看到if(~notfound.indexOf(err.code)){ doSomeing... }这种在一个表达式前面加~号的,今天就来扒一扒这已黑魔法。

~ 取反操作符

不熟悉原码,反码,补码的小伙伴可以先看一下这篇文章原码、反码、补码,计算机中负数的表示
在javascript中,假设有一个变量var a = 1, 那么~a + a = -1, 也就是说现在~a = -2

~ 在条件判断中的用法

先上一段代码

var arr = ['zank', 'ywwhack']
if(~arr.indexOf('zank')){
    console.log('found');
}else{
    console.log('not found');
}

这段代码最后会输出found,说明~arr.indexOf('zank')等价于arr.indexOf('zank')>-1

/img/2.jpg

还记得刚才的~a+a = -1么,其实用的就是这个原理。arr.indexOf()调用后,如果没找到会返回-1,否则返回一个大于-1的整数。

假设a = arr.indexOf(),那么如果arr中存在所查找的元素时,a=-1,那么~a=0,上面代码可以改写如下:

var arr = ['zank', 'ywwhack'],
    a = arr.indexOf('zank'), //a = 0
    exist = ~a; // exist = -1, 
//只有当a = -1时,即arr中不存在查找的元素,exist=0,其余的exist都为负值
if(exist){
    console.log('found');
}else{
    console.log('not found');
}
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看