JavaScript - 数值类型的判断与常用转换方式
主要参考:
- isNaN() - JavaScript | MDN
- Number.isNaN() - JavaScript | MDN
- parseInt() - JavaScript | MDN
- parseFloat() - JavaScript | MDN
数值类型的判断方法isNaN()和Number.isNaN()
- 
可接受任意参数,用来判断其参数是否为NaN(not a number) 
- 
由于把NaN与任何值(包括其自身)相比得到的结果都是false,因此无法通过 ==或===运算符来判断某个值是否为NaN,isNaN()函数也就是必需的
- 
isNaN()与Number.isNaN() - 
直观的说, isNaN()是用来判断参数值是否为NaN,而Number.isNaN()是用来判断参数值是否为Number.NaN(即还需要判断类型为Number);
- 
因此, isNaN()会将参数值强制转换(通过Number())为Number后再判断是否为NaN,而Number.isNaN()仅判断当前参数值是否为NaN。
- 
综上,可有如下表示: isNaN(x)等价于Number.isNaN(Number(x))
 
- 
Number()
参数可为任何类型数据,具体转换规则可大致划分如下:
- 
数字值,只是简单的传入和返回(前导零存在时无论多少都将视为八进制数); Number(123); // 123 Number(0123); // 83 Number(00123); // 83 Number(0x123); // 291
- 
Boolean值,true和false将分别被转换为1和0; Number(true); // 1 Number(false); // 0
- 
null值,返回为0; Number(null); // 0
- 
undefined值,返回为NaN; Number(undefined); // NaN
- 
字符串,又主要区分以下情况: - 
字符串中只包含数字(可带正/负号),则(忽略前导零后)转换为十进制数值; Number('123'); // 123 Number('+123'); // 123 Number('-123'); // -123 Number('0123'); // 123
- 
字符串中包含有效浮点格式,则(忽略前导零后)将其转换为对应浮点数值; Number('1.23'); // 1.23 Number('01.23'); // 1.23 Number('0.1.23'); // NaN
- 
字符串中包含有效十六进制格式,则将其转换为十进制数值; Number('FFF'); // NaN Number('0xFFF'); // 4095
- 
字符串为空(可包含多个空格符),都将转换为0; Number(''); // 0 Number(' '); // 0
- 
字符串中包含除上述字符外的其他字符时,将返回NaN 
 
- 
- 
对象,将先调用对象的 valueOf()方法后再尝试转换其返回值,如结果仍为NaN,会继续调用对象toString()方法并转换其返回值
parseInt()
parseInt()是较于Number()更为通用合理的解决方案
- 
语法 parseInt(string[, radix])- 
string:将被解析的目标(被转换后的)字符串参数; 
- 
radix:(建议明确)标记参数string的数值转换基数。当该参数未使用,或值为undefined、0时,将遵循以下自动判断规则: - 
当字符串已“0x”/“0X”或“0”开头时将自动识别为十六进制或八进制(ECMAScript5中不支持识别为八进制,但各浏览器支持程度不一致); parseInt("0xFF"); // 255 parseInt("0123"); // 10
- 
当字符串起始位为其他值时,默认设定为10(十进制) 
 
- 
 
- 
- 
基本规则 - 
前导/后置空格都将被忽略: parseInt(" 123 "); // 123
- 
识别参数至第一个非数字字符(包括小数点、正/负号等),仅截取前面数字部分,后续字符将被忽略: parseInt("123ab"); // 123 parseInt("1+2"); // 1
- 
当首字符不是数字字符或正/负号时,直接返回NaN: parseInt("a123"); // NaN parseInt("-123"); // -123
 
- 
parseFloat()
parseFloat()相较于parseInt()扩展了浮点数的解析能力
- 
语法 parseFloat(value)- value:唯一参数,即说明只可解析十进制参数,不可指定基数
 
- 
扩展规则 - 
区别于 parseInt()解析到的第一个小数点有效:parseFloat("0.123"); // 0.123 parseFloat("0.1.23"); // 0.1
- 
能够识别适用于科学记数法的e/E操作符: parseFloat("3.14e-2"); // 0.0314 parseFloat("0.314E+2"); // 3.14
- 
无法识别非十进制数字字符: parseFloat("FF"); // NaN parseFloat("0xFF"); // 0
- 
解析转换结果为整数时,将会直接返回整数: parseFloat("5.00"); // 5
 
- 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号