如果一个值等于NaN,你如何可靠地测试?

时间:2014-12-06 09:16:06

标签: javascript

我只知道使用isNaN来测试一个值是否等于NaN。它真的可靠吗?

1 个答案:

答案 0 :(得分:2)

NaN属性表示“非数字”的值。此特殊值来自无法执行的操作,因为其中一个操作数是非数字的(例如," abc" / 4),或者因为操作的结果是非数字的(例如, ,试图除以零)。

虽然这看起来很简单,但NaN有一些令人惊讶的特征,如果不知道它们会导致毛发拉伤。

首先,虽然NaN的意思是“不是一个数字”,但它的类型是,信不信由你,数字:

console.log(typeof NaN === "number");  // logs "true"

此外,NaN与任何事物相比 - 甚至本身! - 是假的:

console.log(NaN === NaN);  // logs "false"

测试数字是否等于NaN的半可靠方法是使用内置函数isNaN(), 但即使使用isNaN() is an imperfect solution.

更好的解决方案是使用value!== value,如果该值等于NaN,则只生成true。此外,ES6提供了一个新的Number.isNaN()函数,它与旧的全局isNaN()函数不同且更可靠。