我只知道使用isNaN来测试一个值是否等于NaN。它真的可靠吗?
答案 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()函数不同且更可靠。