在 JavaScript 中,位运算符一直是一个强大而不太被人所知的工具。在 ES10 中,新增了一个双重非位运算符(Double Bitwise Not operator),也称为“双非”(Double Negation),它可以帮助我们更方便地进行类型转换和变量判断。
双重非位运算符的作用
双重非位运算符是用两个波浪线(~~)表示的,它的作用是将一个值转换为整数类型,并且可以将一个非数字类型的值转换为数字类型。双重非位运算符的运算逻辑如下:
- 将值转换为 32 位整数
- 将整数按位取反
- 再将整数按位取反
- 返回结果
这个过程看起来很繁琐,但实际上只是一个简单的类型转换过程。下面我们将通过示例代码来演示双重非位运算符的作用。
双重非位运算符的示例
console.log(~~true); // 1 console.log(~~false); // 0 console.log(~~null); // 0 console.log(~~undefined); // 0 console.log(~~"123"); // 123 console.log(~~"hello"); // 0 console.log(~~{}); // 0 console.log(~~[]); // 0
从上面的示例可以看出,双重非位运算符可以将 boolean、null、undefined 和字符串类型转换为数字类型,而对于对象和数组等复杂类型,它会将它们转换为 0。
双重非位运算符的应用
双重非位运算符在实际开发中有很多应用场景。下面我们将介绍其中的几个。
双重非位运算符的位运算
双重非位运算符可以与其他位运算符一起使用,用于进行位运算操作。例如,我们可以使用双重非位运算符与按位与运算符(&)一起使用,来获取一个数字的二进制表示中的某一位。
const num = 0b1101; console.log(~~(num & 0b1000)); // 0b1000 -> 8
双重非位运算符的类型转换
双重非位运算符可以用于将一个非数字类型的值转换为数字类型。例如,我们可以使用双重非位运算符将字符串类型的数字转换为数字类型。
const str = "123"; console.log(~~str); // 123
判断变量是否为数字类型
在 JavaScript 中,判断一个变量是否为数字类型是一个常见的需求。使用双重非位运算符可以方便地实现这个需求。
const num = 123; const str = "123"; console.log(~~num === num); // true console.log(~~str === str); // false
总结
双重非位运算符是一个很实用的工具,它可以帮助我们进行类型转换、位运算和变量判断等操作。在实际开发中,我们可以根据具体需求来灵活运用双重非位运算符,提高代码的效率和可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e575051886fbafa410f40a