
JS中~和~~运算符的含义解析
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文详细解释了JavaScript中的~(按位非)和~~(双重按位非)运算符的工作原理及其应用场景,帮助开发者更好地理解与运用。
在JavaScript编程语言中,位运算符主要用于处理整数数据类型的操作;然而,在涉及到浮点数进行位操作时,JS会自动将这些浮点数值转换为32位二进制补码表示形式的整型以执行相应的计算任务。
首先我们来看按位非(~)运算符的应用。当应用该运算至一个数字值时,它会对这个数字在计算机内部存储的二进制代码进行逐比特取反操作(即1变为0,0变1)。如果输入的是非数值类型的数据,则JS会尝试将其转换为32位整数;若此过程失败导致结果是NaN,那么~ NaN的结果就是-1。对于负数值,在执行按位非运算后将得到比原数字小一的正整数。
例如, 对于`(-2.9)`这个数值,首先会被转化为 `-3`(这里取的是最接近的向下取整),然后进行按位非操作,结果是 `0b00000000 0000111`, 即十进制中的数字 `2`.
对于正数来说, 按位非运算则会得到比原数值大一的负数。例如`~2.6`首先转换为整数2,执行按位非后结果是二进制形式的-3。
接下来介绍双按位非(~~)操作符的应用场景:这种连续两次应用按位非的操作通常用来将各种类型的数据强制转化为整型数值,并且可以实现向上或向下取整的效果。对于正数而言, `~~testData` 相当于执行了 `Math.floor(testData)`,即去除了浮点数的小数部分并进行下舍操作;而对于负数,则相当于进行了上取整的操作。
例如:`~~2.1` 会先变成 `-1`, 然后再应用按位非变为 `0`. 而对于 `~~(-2.9)`, 则是先将它转化为 `~ -3 = 2`, 再次进行按位非操作后结果不变,仍然是 `2`.
在某些情况下, 如jQuery代码中可能使用`~this.className.indexOf(str)`来判断一个字符串是否存在于另一个字符串内。这里indexOf()函数返回的是子串位置的索引值;当找不到时返回-1. 使用双按位非可以将这个索引值转换为布尔值,从而快速完成包含性检查。
总的来说, 在JavaScript中利用`~`和 `~~` 运算符不仅可以进行数值类型的位运算操作,还能在特定场景下帮助简化浮点数的处理逻辑。理解这些运算符的工作机制对于编写高效的代码至关重要。
全部评论 (0)


