Javascript 当我们可以抛出类型错误时,为什么需要NaN值?

Javascript 当我们可以抛出类型错误时,为什么需要NaN值?,javascript,language-agnostic,typeerror,nan,Javascript,Language Agnostic,Typeerror,Nan,为什么编程语言有一个NaN值 Math.floor('string'); //--> NaN 为什么不抛出一个打字错误呢 TypeError: Expected number instead of string 问题被标记了,因为JavaScript是我主要熟悉的语言,但我知道这也适用于其他语言。在类型化语言中,即使没有数字,也必须在数字变量中输入数字。您将(这就是为什么在JavaScript中,typeof NaN是“number”)。这就像没有更好的对象引用时对象引用的null

为什么编程语言有一个
NaN

Math.floor('string');  //--> NaN
为什么不抛出一个打字错误呢

TypeError: Expected number instead of string

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

在类型化语言中,即使没有数字,也必须在数字变量中输入数字。您将(这就是为什么在JavaScript中,
typeof NaN
“number”
)。这就像没有更好的对象引用时对象引用的
null

而打破指令流的异常,并不是每个人都喜欢。有些人可能会争辩说,它们应该用于例外情况,而不是一个简单的事实,即字符串不能作为数字进行分析


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

JavasScript是一种弱类型语言。错误抛出是昂贵的。查看jquery或下划线,您将看到很少抛出错误,只有在“异常”情况下才会抛出错误。由于
NaN

等值(以及其他非数值量,如无穷大)是许多编程语言实现的函数的一部分,因此处理此类值的成本更低,也更容易,因为
NaN
s(以及其他非数值量,如无穷大)是函数的一部分


它的设计允许数值计算中的“特殊情况”像正常数字一样进行计算,而不会中断计算。这意味着没有例外。取而代之的是,NAN通常通过操作传播,直到它们出现在另一端,不管是好是坏。

因为异常是一件令人头痛的事:)@尖刻地捕捉它们似乎并不难。它们在代码中引入了一种非线性。这并不难,它只是分散注意力和混乱。可以说,弱类型语言不应该仅仅因为类型不匹配而脱离核心…是的,尽管在这种特殊情况下返回
NaN
有点可疑。谢谢!您做了一个有趣的类比
NaN:number::null:object
@Web\u设计器注意
typeof null
“object”
:)