In javascript undo and undo ~~ doesn't make sense


The operator ~, is the meaning of bit inverted, on the surface ~~ (take the inverse and then take the inverse) does not make sense, in fact, JS can be converted to integer floating point.


<html>
<script>
var myArray = new Array();
myArray.push("a");
myArray.push("b");
myArray.push("c");
myArray.push("d");

//Now I'm going to randomly pick an element out of the array
var random = myArray[~~(Math.random()*myArray.length)]; //Math.random() returns a pseudo-random number between 0 and 1, which may be 0 but is always less than 1, [0,1].

var i = 7.94;
i = ~~i;
alert(i);

var j = 7.34;
j = ~~j;
alert(j);

</script>

</html>

As shown above, if there is no ~~, then the random result is a decimal, and is to remove the decimal part of the decimal, keep the integer. I =7, j=7. However, such a mechanism does not exist in C, where you cannot invert a float by bit, and in C you can use casts (which JS does not have, floating point to integer) to achieve the same purpose.