2013-07-23 53 views
5

为什么编程语言的值有NaN当我们可以抛出TypeErrors时,为什么我们需要NaN值?

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

为什么不只是抛出TypeError?

TypeError: Expected number instead of string 

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

+0

因为例外是颈部疼痛:) – Pointy

+0

@Pointy抓住他们似乎并不那么难。 –

+1

它们在代码中引入了一种非线性。这不是很难,它很难*,它只是分散注意力和混乱。 – Pointy

回答

4

在键入语言中,即使没有数字,也必须在数字变量中放入一个数字。你把NaN(这就是为什么typeof NaN"number"在JavaScript中)。这就像null,当你没有更好的对象引用时。

而违反指令流程的异常对每个人来说都不是那么受欢迎。有些人可能会争辩说,他们应该用于例外情况,而不是一个简单的事实,即一个字符串不能被解析为一个数字。

请注意,NaN也可以是数学运算的结果,发生在无法确定结果应该是什么时(例如0 * Infinity)。用NaN处理这一点比在所有操作中包含分支更简单。

+0

谢谢!你做了一个有趣的类比'NaN:number :: null:object' –

+1

@Web_Designer请注意'typeof null'是'“object”':) –

3

JavasScript是一种弱类型语言。错误投掷是昂贵的。通过jquery或下划线来查看,你会发现错误很少被抛出,只有在“例外”的情况下。处理诸如NaN之类的值的成本更低且更容易。

4

为了不创新,这是因为NaN(以及其他非数字量,如无穷大)是IEEE 754 floating-point standard的一部分,许多编程语言都实现了这一点。

它旨在允许数值计算中的“特殊情况”在不中断计算的情况下像普通数字一样进行评估。这意味着没有例外。取而代之的是,NaN通常通过操作传播,直到它们出现在另一侧,无论好坏。

+1

是的,尽管在这种特殊情况下,返回'NaN '。 – Pointy

相关问题