现象
对字符串两次按位取反可以把字符串转换成对应的数字,对于无法转换的字符串会返回0
let a = '123'
let b = ~~a
//b=123
let c = 'not number'
let d = ~~c
//d=0
可以快速把字符串转数字并且会自动把Nan转成0。
原理
对非数字类型变量进行位操作会先用Number()进行处理先转成数字,然后对所得的结果进行按位处理
ECMAScript进行数值位操作会存在一个64位到32位再到64位的转换,这步操作会出现一个问题:就是会把Nan和Infinity转成0。
推论
既然只要是位操作就会发生转换,那么除了~~、|1也是可以的
let d = '123'
let e = d|1
//e=123