字符串转数字的巧妙优化
常规操作
1 2 let str = '2' console .log (Number (str))
位运算优化
1 2 let str = '2' console .log (~~str)
解析 js中有~是按位取反运算,~~ 用来作双非按位取反运算
~~ 的作用是去掉小数部分,对于正数,向下取整;对于负数,向上取整;与Math.floor()不同的是,它只是单纯的去掉小数部分,不论正负都不会改变整数部分
非数字取值为0,它具体为
1 2 3 4 5 6 7 8 9 10 11 ~~null ; ~~undefined ; --NaN ; ~~0 ; ~~{}; ~~[]; ~~(1 /0 ); ~~false ; ~~true ; ~~1.9 ; ~~-1.9 ;
+号的应用
1 2 let str = '2' console .log (+str)
解析 当用作单目操作符的时候,+操作符不会对Number类型产生影响。但如果应用在字符串类型上,会将其转换为数字:
1 2 3 4 5 6 7 let a = 25 ;a =+ a; console .log (a); let b = '50' ;console .log (typeof b); b=+b; console .log (typeof b);
通常使用+操作符可以快速地将字符串转换为数字。但是如果字符串字面量无法转化为数字的话,结果会出人意料:
1 2 3 4 5 6 7 8 let a = 'asdasdasd' ;a =+ a; console .log (a) console .log (typeof a); let b = '' ;b=+b; console .log (b); console .log (typeof b);