发布于 

字符串转数字的巧妙优化

常规操作

1
2
let str = '2'
console.log(Number(str)) //2

位运算优化

1
2
let str = '2'
console.log(~~str) //2

解析

js中有~是按位取反运算,~~ 用来作双非按位取反运算

~~ 的作用是去掉小数部分,对于正数,向下取整;对于负数,向上取整;与Math.floor()不同的是,它只是单纯的去掉小数部分,不论正负都不会改变整数部分

非数字取值为0,它具体为

1
2
3
4
5
6
7
8
9
10
11
~~null;      // => 0
~~undefined; // => 0
--NaN; // => 0
~~0; // => 0
~~{}; // => 0
~~[]; // => 0
~~(1/0); // => 0
~~false; // => 0
~~true; // => 1
~~1.9; // => 1
~~-1.9; // => -1

+号的应用

1
2
let str = '2'
console.log(+str) //2

解析

当用作单目操作符的时候,+操作符不会对Number类型产生影响。但如果应用在字符串类型上,会将其转换为数字:

1
2
3
4
5
6
7
let a = 25;
a =+ a;
console.log(a); //25
let b = '50';
console.log(typeof b);    //String
b=+b;
console.log(typeof b);    //Number

通常使用+操作符可以快速地将字符串转换为数字。但是如果字符串字面量无法转化为数字的话,结果会出人意料:

1
2
3
4
5
6
7
8
let a = 'asdasdasd';
a =+ a;
console.log(a) //NaN
console.log(typeof a);    //Number
let b = '';
b=+b;
console.log(b); //0
console.log(typeof b);    //Number