isNaN(null) false //为什么null类型也算是数字,不是个空对象吗? isNaN('undefied') true isNaN('NUM') true isNaN(62) false
欢迎选择我的课程,让我们一起见证您的进步~~
isNaN函数可以接受一个任何类型的参数,它可以确定这个参数是否“不是数值”。在基于对象调用isNaN()时,首先调用valueOf()方法,确定这个方法返回的值是不是可以转换为数值,null可以返回0,所以false
楼主可能误解isNaN(null)为false的意思了,之所以为false只能说明他不是NaN,而不能说明它就一定是number类型,你可以通过Object.prototype.toString.call(null)来看看,他是一种特殊的类型而已。
isNaN(null)
Object.prototype.toString.call(null)
另外说一下结果为什么会是false,在做这个操作之前,会有一个转化的过程,像这样Number(null),null在运算中会被当作0来看待,所以isNaN(null)也就相当于isNaN(0)了,出来的结果就是你看到的false,如果是undefined就不能做转换了。
Number(null)
isNaN(0)
看规范 http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.4 中有说 这里又涉及到了toNumber http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
var test = null ; console.log(Number(test)); //0
我只想说..'undefied' 是字符串
'undefied'
isNaN函数可以接受一个任何类型的参数,它可以确定这个参数是否“不是数值”。在基于对象调用isNaN()时,首先调用valueOf()方法,确定这个方法返回的值是不是可以转换为数值,null可以返回0,所以false
楼主可能误解
isNaN(null)
为false的意思了,之所以为false只能说明他不是NaN,而不能说明它就一定是number类型,你可以通过Object.prototype.toString.call(null)
来看看,他是一种特殊的类型而已。另外说一下结果为什么会是false,在做这个操作之前,会有一个转化的过程,像这样
Number(null)
,null在运算中会被当作0来看待,所以isNaN(null)
也就相当于isNaN(0)
了,出来的结果就是你看到的false,如果是undefined就不能做转换了。看规范 http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.4 中有说 这里又涉及到了toNumber http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
我只想说..
'undefied'
是字符串