实现一个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
解释
-
Number.isNaN(value):- 这是 ES6 引入的方法,专门用于判断一个值是否是 NaN,并且不会进行类型转换。
- 如果
value是 NaN,则返回true;否则返回false。
-
typeof value === 'number' && value !== value:typeof value === 'number'确保value是一个数字类型。value !== value是一个巧妙的方法来判断value是否是 NaN,因为 NaN 是唯一一个不等于自身的值。
这两个方法都能准确判断一个值是否是 NaN,而不会受到类型转换的影响。推荐使用 Number.isNaN,因为它是标准方法,简洁且易于理解。
浙公网安备 33010602011771号