了解下划线对isNaN的实现

Ran*_*lue 7 javascript numbers nan underscore.js

取自underscore.js源:

_.isNaN = function(obj) {
  return _.isNumber(obj) && obj != +obj;
};
Run Code Online (Sandbox Code Playgroud)

他们为什么这样做?以上实现是否等同于:

_.isNaN = function(obj) {
  return obj !== obj;
};
Run Code Online (Sandbox Code Playgroud)

如果是,为什么"更复杂"的版本?如果不是,那么行为差异是什么?

Den*_*ret 4

_.isNaN(new Number(NaN))返回真。

这是设计使然

var n = new Number(NaN);
console.log(_.isNaN(n), n!==n); // logs true, false
Run Code Online (Sandbox Code Playgroud)