主要参考:
- 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(十进制)
- 当字符串已“0x”/“0X”或“0”开头时将自动识别为十六进制或八进制(ECMAScript5中不支持识别为八进制,但各浏览器支持程度不一致);
- 基本规则
- 前导/后置空格都将被忽略:
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
- 区别于
JavaScript - 数值类型的判断与常用转换方式
原文地址:https://www.cnblogs.com/JustBeZero/p/9639664.html
时间: 2024-10-10 09:25:32