5

尽管函数的名称在isNaN语义上指的是值isNaN,但本机实现会返回true一些非NaN对象,如undefinedor {}

isNaN(undefined);
=> true

我认为,例如,下划线的实现更加直观/合乎逻辑:

_.isNaN(undefined);
=> false

为什么 ECMA 标准规定了这种违反直觉的行为?

为什么他们不设计仅在要测试的值确实为 时才isNaN返回,并留下负担在单独的函数上测试可转换为数字的负担?true isNaNisNumber

这样做会带来更多优势,例如在测试数字时不会出现双重否定:

if (isNumber(x)) { } // if x is a number

代替

if (!isNaN(x)) { }   // if x is not not a number

由于他们将Number.isNaN()在 ECMAScript 6 中引入(它完全符合您的期望),看起来有更多人这样想。

那么,为什么他们isNaN首先要设计它的方式呢?这只是一个错误的决定还是有充分的理由这样做?

4

0 回答 0