本文解析JavaScript中~~运算符的实际用途。虽然表面看取反再取反无意义,但该操作可将浮点数转换为整数,常用于从数组中随机选取元素。文章通过示例展示了其在JS中的独特应用,并对比了C语言中强制类型转换的区别。
JavaScript中~~运算符的实际用途
运算符~表示按位取反。表面上看,连续使用两次取反(~~)似乎没有实际意义,但在JavaScript中,这一操作可以将浮点数转换为整数。
代码如下:
<html>
<script>
var myArray = new Array();
myArray.push("a");
myArray.push("b");
myArray.push("c");
myArray.push("d");
//现在要随机从数组中取出一个元素
var random = myArray[~~(Math.random()*myArray.length)]; //Math.random()返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1)
var i = 7.94;
i = ~~i;
alert(i);
var j = 7.34;
j = ~~j;
alert(j);
</script>
</html> 如上所示,如果不使用~~,随机得到的将是小数,且仅保留整数部分。例如上述代码中i和j的结果均为7。然而,在C语言中并不存在这种机制,C语言不允许对浮点数(float)进行按位取反操作。在C语言中,可以通过强制类型转换达到相同目的(即舍弃小数部分,保留整数部分),而JavaScript中则没有直接的强制类型转换语法来实现浮点数转整数,因此~~成为一种替代方案。
