// Is the given value `NaN`? (NaN is the only number which does not equal itself).
_.isNaN = function(obj) {
return _.isNumber(obj) && obj !== +obj;
};
//为了看的清楚,下面的代码在源码上做了一点点修改
_.isNumber= function(obj) {
return return Object.prototype.call(obj) === '[object Number]';
};
请看下面的例子。
上面代码中,isNaN函数将obj对象转为数值。首先,调用obj.valueOf方法, 结果返回对象本身;于是,继续调用obj.toString方法,这时返回字符串
"[object Object]",对这个字符串使用isNaN函数,得到true。因为字符串不是数字。默认情况下,对象的valueOf方法返回对象本身,所以一般总是会调用toString方法,而toString方法返回对象的类型字符串(比如[object Object])。所以,会有下面的结果。
如果toString方法返回的不是原始类型的值,结果就会报错。
上面代码的valueOf和toString方法,返回的都是对象,所以转成数值时会报错。
从上面的例子可以看出,valueOf和toString方法,都是可以自定义的。
为了更好的解释先运行的valueOf()方法,可以进行如下测试,Number() 和 isNaN()行为类似
解释的够清楚了,哈哈,望采纳
undersocerjs对NaN的判断谢谢各位老师的指点,非常感谢!