当我们抛出TypeErrors时,为什么我们需要NaN值?

时间:2013-07-23 17:51:16

标签: javascript language-agnostic typeerror nan

为什么编程语言的值为NaN

Math.floor('string');  //--> NaN

为什么不抛出TypeError?

TypeError: Expected number instead of string

问题被标记为,因为JavaScript是我主要熟悉的语言,但我知道这也适用于其他语言。

3 个答案:

答案 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之类的值的成本更低且更容易。