按位操作符"~"

今天项目中看到一个js片段,引起了我的注意,之前也看过类似的,但是当时只是无意看到,大约知道是位运算符,因为之前没用上所以就没太留意,既然现在项目中有人用到了,就好好研究下。

var names = [];
var name = 'tom';
if (!~names.indexOf(name )){
	 console.log(name );
}

!~names.indexOf(name ) 是什么意思了?反正测试可以得出结果值有这个的规律 -(X+1),感觉还不是太明白。

于是,先查了一下文档:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

概述:

按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

~ 即 (按位非)

aNOT a
01
10

对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6。

var str = 'rawr';
var searchFor = 'a';

// 这是 if (-1*str.indexOf('a') <= 0) 条件判断的另一种方法
if (~str.indexOf(searchFor)) {
  // searchFor 包含在字符串中
} else {
  // searchFor 不包含在字符串中
}

// (~str.indexOf(searchFor))的返回值
// r == -1
// a == -2
// w == -3
例子
  • ~value的使用

判断数值中是否有某元素时,以前这样判断:

if(arr.indexOf(ele) > -1){...} //易读
现在可以这样判断,两者效率:

if(~arr.indexOf(ele)){...} //简洁
  • ~~value的使用

对于浮点数,~~value可以代替parseInt(value),而且前者效率更高些

parseInt(-2.99) //-2
~~(-2.99) //-2

位运算的效率会比运算符高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值