Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • isNAN 和 Number.isNAN 的区别

isNAN 和 Number.isNAN 的区别

结论

全局对象的 isNaN 在确定参数是否为 NaN 之前,会将其参数转换为 number 类型

Number.isNaN()是 ES6 的方法,函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

代码实操

isNaN("我是字符串"); // true

Number.isNaN("我是字符串"); // false

实现逻辑

isNaN

将参数转换为 number 类型 如果转换后的参数为 NaN,返回 true 否则,返回 false

Number.isNaN

如果参数为 number 类型,返回 false 如果参数为 NaN,返回 true 否则,返回 false

eg

isNaN(NaN);

isNaN("A String");

isNaN(undefined);

isNaN({});

Number.isNaN(NaN);

Number.isNaN("A String");

Number.isNaN(undefined);

Number.isNaN({});

输出

true;
true;
true;
true;
true;
false;
false;
false;

拓展

Number.isNaN() 的 polyfill 没有 ES6 的情况下,可以采用以下 polyfill

if (!Number.isNaN) {
  Number.isNaN = function (n) {
    return typeof n === "number" && window.isNaN(n);
  };
}

简单来看,就是在原有 isNaN() 的基础上增加了一个 type 的判断,因为 NaN 的 type 是 number。 还有一种更加简单的实现

if (!Number.isNaN) {
  Number.isNaN = function (n) {
    return n !== n;
  };
}

利用了只有 NaN 不跟自己相等的特性。

Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人