NaN不等于它自己。你可以使用这个特性判断一个变量是否为 NaN,一个变量如果不等于它自己,这个变量一定是 NaN。
还有一个方式是使用 Number.isNaN。注意如果不已知这个变量的类型是数字时,不要使用 isNaN做判断,因为 isNaN 有个很诡异的特性:它会先将待判断的变量转换为数值类型。
isNaN('abc') // true
isNaN('123') // false
isNaN('') // false
isNaN([]) // false
isNaN({}) // true
永远不要写 someVal===NaN
正确使用 parseInt
首先parseInt接受两个参数,第一个参数为待parse的字符串(如果不是字符串则会首先转换为字符串);第二个参数为使用的进制数。
如果不传第二个参数,则进制由第一个参数决定。什么意思呢?比如以 0x 开头的字符串,会被解析为16进制数。
我们知道以数字 0开头的数字为8进制数(非严格模式),比如 011 === 9,0 本身也是8进制数。那么问题来了, parseInt('011') = ?
答案是看浏览器。目前绝大多数浏览器都会作为10进制数解析,结果为11。但是还有一些老旧的浏览器以8进制数解析(例如IE8和一批老Android浏览器)

所以如果你非要用 parseInt:
parseInt使用规则一:请传入第二个参数
回到 parseInt 本身的含义。顾名思义这个函数是在parse,被parse的一定是个字符串。如果第一个参数不是字符串,那么会首先被转换为字符串。
问: parseInt(0.0000000008)=?
答:
String(0.0000000008) => '8e-10'
parseInt('8e-10') => 8
自己打开调试器去试
parseInt使用规则二:永远不要使用parseInt给小数取整
建议对于数值转换一概使用强制转换函数 Number,如果你JS用6了可以使用 +(正号)。如果需要对某个数字取整,建议使用 Math.trunc。如果你能确定数值在 32 位以内,可以使用 x|0或 ~~x等方式

parseInt的用处在于转换一些CSS里带单位的值: parseInt('10px',10)=> 10。接口安全调用但这里建议使用parseFloat,可以解析小数又没有进制问题。
除了用于比较 null 或 undefined,永远不要使用非严格相等 ==
绝不要简单的把非严格相等 ==理解为两者表示的数字一样,它有一套非常复杂的转换规则:它会先将 %%转换为 @@,然后把 !!转换为 **,如果 %%是 ??类型,还会 xx一把……
看不懂对吧,我相信你就算看懂了也记不住的。不然请问:
'true' == true // => false
'true' == false // => false
[] == {} // => false
[] == [] // => false
关于非严格相等,你只需要记住这个规则:
null == null // => true
undefined == undefined // => true

null == undefined // => true
undefined == null // => true
x == null // => false (x 非 null 或 undefined)
x == undefined // => false (x 非 null 或 undefined)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-88203-2.html
美国急了