5

为什么编程语言NaN有价值?

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

为什么不直接抛出 TypeError?

TypeError: Expected number instead of string

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

4

3 回答 3

4

没有创意,这是因为NaNs(以及其他非数字量,如无穷大)是许多编程语言实现的IEEE 754 浮点标准的一部分。

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

于 2013-07-23T17:58:10.900 回答
4

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

中断指令流的异常并不是每个人都那么受欢迎。有些人可能会争辩说它们应该用于例外情况,而不是字符串不能解析为数字的简单事实。

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

于 2013-07-23T17:54:32.427 回答
3

JavaScript 是一种弱类型语言。错误抛出是昂贵的。通过 jquery 或下划线查看,您会发现很少抛出错误,仅针对“异常”情况。处理诸如NaN.

于 2013-07-23T17:56:58.390 回答