- parseInt:可以接收字符串,也可以接收数字,返回一个数字类型的值。如果数字在前,会丢弃小数部分,如果非数字或非数字的字符在前,则会得到NaN。
parseInt(9.1) // 9
parseInt('9.1') // 9
parseInt('9.1a') // 9
parseInt('a9.1') // NaN
- Math.trunc():接收数字,丢弃小数部分,返回整数部分。(注意,如果参数是字符串且不符合一个正常数字格式,会返回NaN)
Math.trunc(9.1) // 9
Math.trunc('9.1') // 9
Math.trunc('9.1a') // NaN
Math.trunc('a9.1') // NaN
Math.trunc('9.1.1') // NaN
- ~~:反转操作数的位,首先会截取32位,如果有小数位,会被截取掉,然后对32位的每一位,执行按位非的运算,每次都是执行-(input + 1),执行两次就是-(-(input + 1) + 1),所以可以得到取整的数。 (与Math.trunc()的区别是,如果参数是字符串且不符合一个正常数字格式,会返回0)
~~(9.1) // 9
~~('9.1') // 9
~~('9.1a') // 0
~~('a9.1') // 0
~~('9.1.1') // 0
备注:我个人理解,取整的话,最好还是使用Math.trunc(),第一,代码需要语义化,它是浏览器原生支持的api方法,第二,~~方法在一些使用场景下可能会有意想不到的行为,所以位运算最好还是在适合它的应用场景下使用。