0x01 不期而遇的 NaN
当我们的某个计算无法得到数字结果时,我们会和 NaN 不期而遇。比如:
var divisionByStr = 42 / "str";
// Outputs: NaN
console.log(divisionByStr);
当我们使用 parseInt 或 parseFloat 时也比较容易碰到 NaN。比如:
var helloParse = parseInt("hello")
// Outputs: NaN
console.log(helloParse)
var infiniteParse = parseInt(2/0)
// Outputs: NaN
console.log(infiniteParse)
0x02 如何判断结果是否为 NaN
要判断某个计算结果是否为 NaN,很自然的就会想去用下面的方式:
var infiniteParse = parseInt(2/0)
var equalsNaN = (infiniteParse === NaN)
// Outputs: false
console.log(equalsNaN);
不过结果和预期的并不一致。
NaN 和它自己并不相等。
还有其他办法么?
网上可以找到的办法通常是用 isNaN
var infiniteParse = parseInt(2/0)
var valueIsNaN = isNaN(infiniteParse)
// Outputs: true
console.log(valueIsNaN);
貌似这个方式确实可行耶。
不过,看看下面的代码,也许你会稍微有点儿不淡定
var isJokeNaN = isNaN("Joke");
// Outputs: true
console.log(isJokeNaN);
貌似 isNaN 并不是真的判定一个值是不是 NaN,而是判断一个值是否能转换为数字。
还有其它办法么?
还记得么?NaN 不等于它自己,这个在 javascript 中可是独一份的存在。是否可以利用这个特性呢?
var infiniteParse = parseInt(2/0)
var valueIsNaN = infiniteParse !== infiniteParse
// Outputs: true
console.log(valueIsNaN);
嗯,貌似可以,先就这么干了!
网友评论