关于JS数值转换的问题
一、Number和parseInt
Number
Number()
和parseInt()
都可以将对象转换为数值,但转换方式有些许不同。
Number()
转化中值得注意的是:
Number(undefined) === NaN
而null会被转化为0
Number(null) === 0
Number("1234blue") === NaN
parseInt
parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回 NaN;也就是说,用 parseInt()转换空字符串会返回 NaN(Number()对空字符返回 0)。如
果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如,"1234blue"会被转换为 1234,因为"blue"会被完全忽略。类似地,"22.5"会被转换为 22,因为小数点并不是有效的数字字符。
var num2 = parseInt(""); // NaN
parseInt("1234blue") === 1234
parseInt(null) === NaN
二、关于js乘除法的特例
乘法
如果是 Infinity 与 0 相乘,则结果是 NaN
Infinity * 0 // => NaN
除法
如果是 Infinity 被 Infinity 除,则结果是 NaN;
console.log(Infinity / Infinity); // NaN
0 / 0 = NaN
console.log(0 / 0); // NaN
加法
如果是 Infinity 加 Infinity,则结果是 Infinity;
console.log(Infinity + Infinity); // Infinity
减法
如果是 Infinity 减 Infinity,则结果是 NaN;
console.log(Infinity - Infinity); // NaN
相等操作符
主要注意关于对象的比较,会首先调用valueOf函数,没有的话调用toString函数
[] == !([]) // 左边是对象,调用valueOf() => []空对象 => Number => 0
Number({}) => NaN
Number([]) => 0