这几天看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
还记得刚才的~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');
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。