实现一个isNaN的方法

在前端开发中,isNaN 是一个常用的全局函数,用于判断一个值是否是 NaN(Not-a-Number)。然而,JavaScript 自带的 isNaN 函数有一个缺陷:它会首先尝试将其参数转换为一个数字,然后再判断是否为 NaN。这意味着 isNaN("string") 会返回 true,因为 "string" 在转换为数字时变成了 NaN

为了克服这个缺陷,我们可以自己实现一个 isNaN 方法,该方法只会在参数已经是数字类型时,才判断其是否为 NaN。以下是一个简单的实现:

function myIsNaN(value) {
    // 使用 Number.isNaN 方法,这是 ES6 引入的一个更准确的 isNaN 实现
    return Number.isNaN(value);
}

// 或者,如果你不想依赖 ES6,可以使用以下等效实现:
function myIsNaN(value) {
    // 首先检查值是否为数字类型(包括 NaN)
    return typeof value === 'number' && value !== value;
}

// 测试用例
console.log(myIsNaN(NaN));       // true
console.log(myIsNaN(42));        // false
console.log(myIsNaN('42'));      // false
console.log(myIsNaN('NaN'));     // false
console.log(myIsNaN(undefined)); // false
console.log(myIsNaN({}));        // false

解释

  1. Number.isNaN(value):

    • 这是 ES6 引入的方法,专门用于判断一个值是否是 NaN,并且不会进行类型转换。
    • 如果 value 是 NaN,则返回 true;否则返回 false
  2. typeof value === 'number' && value !== value:

    • typeof value === 'number' 确保 value 是一个数字类型。
    • value !== value 是一个巧妙的方法来判断 value 是否是 NaN,因为 NaN 是唯一一个不等于自身的值。

这两个方法都能准确判断一个值是否是 NaN,而不会受到类型转换的影响。推荐使用 Number.isNaN,因为它是标准方法,简洁且易于理解。

posted @ 2024-12-14 09:42  王铁柱6  阅读(55)  评论(0)    收藏  举报