为什么编程语言的值为NaN
?
Math.floor('string'); //--> NaN
为什么不抛出TypeError?
TypeError: Expected number instead of string
问题被标记为javascript和language-agnostic,因为JavaScript是我主要熟悉的语言,但我知道这也适用于其他语言。
答案 0 :(得分:4)
在键入的语言中,即使您没有数字,也必须在数字变量中加上数字。您放置了NaN(这就是JavaScript中typeof NaN
为"number"
的原因)。对于没有更好的对象引用,这就像null
一样。
打破指令流的异常实际上并不是每个人都如此受欢迎。有些人可能认为它们应该用于异常情况,而不是字符串不能解析为数字的简单事实。
请注意,NaN
也可能是数学运算的结果,当无法确定结果应该是什么时发生(例如0 * Infinity
)。使用NaN处理此问题比在所有操作中包含分支更简单。
答案 1 :(得分:4)
要成为非创造性的,那是因为NaN
s(以及其他非数字量,如无穷大)是许多编程语言实现的IEEE 754 floating-point standard的一部分。
它旨在允许数值计算中的“特殊情况”像正常数字一样进行评估,而不会中断计算。这意味着没有例外。取而代之的是,NaN通常会通过操作传播,直到它们出现在另一边,无论好坏。
答案 2 :(得分:3)
JavasScript是一种弱类型语言。错误投掷是昂贵的。查看jquery或下划线,您将看到很少抛出错误,仅针对“特殊”情况。处理诸如NaN
之类的值的成本更低且更容易。