今天项目中看到一个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数值。
~ 即 (按位非)
| a | NOT a |
|---|---|
| 0 | 1 |
| 1 | 0 |
对任一数值 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
位运算的效率会比运算符高。
本文探讨了JavaScript中位运算符的应用,特别是按位非运算符“~”结合数组indexOf方法的一种新颖用法,通过具体示例展示了其在代码简洁性和效率上的优势。
1842

被折叠的 条评论
为什么被折叠?



