NaN
JavaScript中有一个特别的对象:NaN
,它示意一个不法的数字(Not-a-Number)。这个对象非常特别,它的范例是number
,属于原始值,然则和本身不相等。即NaN === NaN
返回false
。
NaN和本身不相等,乍一看违背直觉,但却相符IEEE754的划定。IEEE754的委员会成员曾诠释过将NaN设想为不等的衡量。
isNaN
由于NaN
的特别性,我们常常须要推断一个值是不是为NaN,一般我们运用isNaN
来推断,比方:
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(1); // false
如果说NaN
是JavaScript的一个坑的话,isNaN
就是另一个坑了。由于isNaN
会先将通报给它的对象转化为数字范例。而我们晓得,关于一般的字符串,转化为数字范例会返回NaN
。于是就踩坑了。。。
isNaN("1"); // fales "1" 被转化为数字 1,因而返回false
isNaN("SegmentFault"); // true "SegmentFault" 被转化成数字 NaN
所以说,一般对字符串运用isNaN
方法会返回true
,isNaN
坑爹了——固然,isNaN
或许会反驳说这不是它的坑,这是JavaScript强迫范例转换的坑。
那末,可不可以不做范例转换直接推断呢?ES6用Number.isNaN
填上了这个坑。Number.isNaN
不会转换对象的范例。
Number.isNaN('SegmentFault'); // false
ES6的这个新特征,已被NodeJS和部份浏览器所支撑。
编撰 SegmentFault