一. Number()
1.参数为Boolean时,true为1,false为2
Number(true); // 1
Number(false); // 0
2.参数为String时
// 1. 当字符串中有字母时
Number("abc"); // NaN
Number("abc123"); // NaN
Number("123abc"); // NaN
// 2. 当字符串中只有数字时(数字前可以有正负号)
Number("123"); // 123
Number("+123"); // 123
Number("-123"); // -123
Number("0123"); // 123 忽略前导0
// 小数
Number("1.23"); // 1.23
// 十六进制数会转为十进制
Number("0xf"); // 15
// 空字符串转为0
Number(""); // 0
3.参数为null,返回0
Number(null); // 0
4.参数为undefined,返回NaN
Number(undefined); // NaN
5.参数为对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果为NaN,则调用对象的toString()方法,然后再按照前面的规则转换返回的字符串值。
// 数字数组
Number([1, 2]); // NaN
Number([1]); // 1
// 字符串数组
Number(["1", "2"]); // NaN
Number(["1"]); // 1
Number(["a"]); // NaN
Number([null]); // 0
6.数字则转换成对应的数值
Number(1); // 1
Number(-0.1); // -0.1
二. parseInt()
1.参数为Boolean时,返回NaN
parseInt(true); // NaN
parseInt(false); // NaN
2.参数为String时,一个字符一个字符解析,直到解析完或遇到第一个非数字字符。
注:小数点也不是有效的数字字符。
// 既有数字,又有字符
parseInt("abc123"); // NaN
parseInt("123abc"); // 123
// 整数
parseInt("000123"); // 123 忽略前导0
// 小数
parseInt("1.23"); // 1
// 十六进制,第二个参数指定转换时使用的基数(即几进制)
parseInt("0xAF"); // 175
parseInt("AF"); // NaN
parseInt("0xAF", 16); // 175 指定按十六进制解析
parseInt("AF", 16); // 175 指定按十六进制解析
// 八进制
parseInt("070"); // 70 ES5认为其为70(十进制)
parseInt("70"); // 70
parseInt("070", 8); // 56 指定按八进制解析
parseInt("70", 8); // 56 指定按八进制解析
// 空字符
parseInt(""); // NaN
3.参数为对象
// 数组,解析第一个值
parseInt([1,2]); // 1
parseInt([1, "a"]); // 1
parseInt(["a", 1]); // NaN
三. parseFloat()
1.参数为Boolean时,返回NaN
parseFloat(true); // NaN
parseFloat(false); // NaN
2.参数为String时,一个字符一个字符解析,直到解析完或遇到一个无效的浮点数字字符为止。
即:字符串中第一个小数点是有效的,第二个小数点是无效的。
注:parseFloat()无第二个参数,不能解析十六进制数。
// 既有数字,又有字符
parseFloat("123.456abc"); // 123.456
parseFloat("abc123.456"); // NaN
// 小数
parseFloat(".456"); // 0.456
parseFloat("000012.34"); // 12.34 忽略前导0
parseFloat("123.456.789"); // 123.456 第二个小数点无效
parseFloat("1.23e5"); // 123000
// 十六进制
parseFloat("0xAF"); // 0
// 空字符
parseFloat(""); // NaN
四. 总结
- Number()能转换boolean值,null,只含整数或小数的字符串,空字符串,对象。
- parseInt()按字符解析,直到遇见第一个非数字字符为止。
- parseFloat()按字符解析,直到遇见一个无效的浮点数字字符为止。