检查 TypeScript 中的值是否为 NaN

在 TypeScript 中检查一个值是否为 NaN

Check if a Value is NaN in TypeScript

要检查值是否为NaN,请调用该Number.isNaN()方法,将值作为参数传递给它。如果传入的值是且类型为,则Number.isNaN方法返回,否则返回trueNaNnumberfalse

索引.ts
const val = Number('hello'); console.log(val); // 👉️ NaN if (Number.isNaN(val)) { // 👇️ this runs only if NaN and type of number console.log('Value is NaN'); }

我们使用
Number.isNaN
方法来检查一个值的类型是否为
number和 is NaN

如果传递给Number.isNaN方法的值不是数字类型,则必须在传递给方法之前对其进行转换。

索引.ts
// 👇️ false, because passed in value is not a number console.log(Number.isNaN('test'));

Number.isNaN方法仅true在传入值的类型为number且 为时返回NaN

索引.ts
// 👇️ true console.log(Number.isNaN(Number('test')));
为了获得准确的结果,请始终将非数字转换为数字,然后再将它们传递给方法。

在检查 时永远不要尝试使用相等运算符,因为它在 Javascript(和 TypeScript)中并不等于,NaN这看起来可能令人困惑。NaNNaN

索引.ts
// 👇️ don't do this console.log(Number.NaN === Number.NaN); // 👉️ false
NaN是 JavaScript(和 TypeScript)中唯一不等于自身的值。

只有满足以下条件Number.isNaN才会返回:true

  • 该值是类型number
  • 价值是NaN

以下所有示例都返回false.

索引.ts
console.log(Number.isNaN('hello')); // 👉️ false console.log(Number.isNaN([])); // 👉️ false console.log(Number.isNaN({})); // 👉️ false console.log(Number.isNaN(undefined)); // 👉️ false console.log(Number.isNaN(null)); // 👉️ false

Number.isNaN功能非常容易实现。

索引.ts
function isNaN(input: unknown) { return typeof input === 'number' && input !== input; }

The function takes a parameter of type unknown, checks whether it is a
number and is not equal to itself.

Since NaN is the only value in TypeScript that is not equal to itself this is sufficient to determine whether the user input is NaN.

You might also see examples online that use the older
isNaN
function.

This is generally a bad practice, because the isNaN method is very
unintuitive.

If the argument provided to the isNaN method is not of type number, the
method coerces the value to a number, before checking if it’s NaN.

This is different from the Number.isNaN method, which doesn’t coerce the
passed in value.

幸运的是,在 TypeScript 中,该isNaN函数的类型是采用类型参数number
,因此搬起石头砸自己脚的难度要大得多。

通常建议不要使用超出其需要的方法,这可能会让您大吃一惊,并导致难以跟踪应用程序中的错误。