## 将一个非数值数据转换为数值
有三个方法能将一个非数值转换为数值:Number(),parseInt()和parseFloat()。
Number()
Number转换规则如下:
1. Boolean类型的true和false分别转换为1和0;
2. 数字值就是简单的传入和返回;
3. null,返回0;
4. undefined,返回NaN;
5. 字符串则要分几种情况处理,空字符串返回0,仅包含数字或者数字及小数点的字符串,将其转换为相应的数值,包含除数字外其他类型字符的转为NaN;
6. 对象的话,则调用对象的valueOf(), 按照前面的规则转换,若结果为NaN,则调用对象的toString(),在此按照前面的规则进行转换;
Number('abc'); // NaN Number(''); // 0 Number(true); // 1
**注意:一元操作符也能实现和Number()一毛一样的功能。**
Number()在处理字符串的时候比较复杂并且不够合理,因此在处理字符串的时候经常使用的是parseInt()和parseFloat().
parseInt()和parseFloat()
与Number()不同的是:
- Number()将空字符串转换为0,而parseInt()和parseFloat()会将空字符串转换为NaN;
- Number()转化的是整个值而不是部分值,parseInt()和parseFloat()只转化第一个无效字符之前的字符串。
- parseInt()方法可以传第二个参数指定数值转换的基数(比如按照十进制解析还是按照八进制解析等),parseInt只能解析十进制值;
Number('123abc'); // NaN parseInt('123abc'); // 123 parseFloat('123.45ab); // 123.45 parseInt('10', 2); // 2, 按照二进制解析 parseInt('10', 10); // 10, 按照十进制解析
**注意,再不指定parseInt()方法的基数,即不传第二个参数的时候,是由parseInt()来决定如何解析字符串的,因此为了避免错误的解析,我们最好永远指定基数。
将一个值转换为字符串
有两种方式可以将一个值转换为字符串:toString()和String()
toString()
除了undefined和null都有toString()方法,大多数情况下调用toString()方法不必传参数,但在调用数值的toString()方法的时候,可以传递一个参数,输出数值的基数。
String()
这个函数可以将任何类型的值转换为字符串,当不知道要转换的值是否为null或者undefined的时候,则可以使用String()方法来转化。可将null转为'null',undefined转为'undefined'。
**另外要把某个值转为字符串还可以与一个空字符串做加法操作,同样能达到转换目的**