Javascript 如何可靠地测试值是否等于NaN?
我只知道使用isNaN来测试一个值是否等于NaN。它真的可靠吗?NaN属性表示一个“不是数字”的值。此特殊值是由于一个操作数为非数字(例如“abc”/4)或操作结果为非数字(例如试图除以零)而无法执行的操作而产生的 虽然这看起来很简单,但NaN有一些令人惊讶的特性,如果不知道它们,可能会导致毛发拉扯错误 首先,尽管NaN的意思是“不是数字”,但信不信由你,它的类型是数字:Javascript 如何可靠地测试值是否等于NaN?,javascript,Javascript,我只知道使用isNaN来测试一个值是否等于NaN。它真的可靠吗?NaN属性表示一个“不是数字”的值。此特殊值是由于一个操作数为非数字(例如“abc”/4)或操作结果为非数字(例如试图除以零)而无法执行的操作而产生的 虽然这看起来很简单,但NaN有一些令人惊讶的特性,如果不知道它们,可能会导致毛发拉扯错误 首先,尽管NaN的意思是“不是数字”,但信不信由你,它的类型是数字: console.log(typeof NaN === "number"); // logs "true" 此外,NaN与
console.log(typeof NaN === "number"); // logs "true"
此外,NaN与任何东西相比——甚至是它自己是假的:
console.log(NaN === NaN); // logs "false"
测试数字是否等于NaN的半可靠方法是使用内置函数isNaN(),
但即使使用
更好的解决方案是使用value!==值,仅当该值等于NaN时才会生成true。此外,ES6还提供了一个新的Number.isNaN()函数,它与旧的全局isNaN()函数不同,也更可靠。请参见此处:
typeof value==“Number”和&isNaN(value)
?这也是一个很好的解决方案。