parseInt("")
的结果是 NaN
,因为标准规定如此,即使 +""
的结果是 0
(也只是因为标准规定如此,例如 "" == 0
)。
不要试图在其中寻找逻辑,因为没有深刻的逻辑,只有历史。
在我看来,你正在犯一个大错误……越早纠正,对你的 JavaScript 编程生涯就越有好处。这个错误是你假设编程语言中的每个选择和技术细节都是合乎逻辑的。这简直是不可能的。
特别是对于 JavaScript。
请记住,JavaScript 是匆忙“设计”的,仅仅因为命运的原因,它在一夜之间变得极其流行。这迫使社区在对细节进行任何严肃思考之前对其进行标准化,因此它基本上在任何严格的现场测试之前就被“冻结”在了当前可悲的状态。
有些部分太糟糕了,甚至不好笑(例如with
语句或==
相等运算符是如此糟糕,以至于严肃的JS IDE警告任何使用它:任何使用它:即使只使用普通值而没有任何“特殊”值,例如null
,undefined
,NaN
或空字符串""
,也会出现A==B
,B==C
和A!=C
,而不是因为精度问题)。
在Javascript中,无意义的特殊情况无处不在,试图将它们放在逻辑框架中,很遗憾,是一种浪费的努力。通过阅读大量资料来学习其奇怪之处,并享受其提供的出色运行时环境(这就是Javascript真正闪耀的地方……浏览器及其JIT是真正令人印象深刻的技术:您可以编写几行代码,并在各种不同的计算设备上运行实际有用的软件)。
所有奇怪之处都被列举在官方标准中,但读起来非常困难,因为它旨在非常精确,而不幸的是,它必须指定的规则真的很复杂。
此外,随着语言功能的增加,规则会变得越来越复杂:例如,对于ES5而言,仅仅是另一个奇怪的“特殊”情况(例如
Date
对象的
ToPrimitive
操作行为),在ES6中成为了一个“正常”的情况(其中
ToPrimitive
可以被自定义)。
不确定这种“正常化”是否值得高兴...真正的问题是起点被冻结了,现在没有简单的解决方案(如果你不想扔掉所有现有的JavaScript代码的话)。
一门语言的正常路径是从干净、漂亮、对称和小型开始。然后当面临现实世界的问题时,语言就会获得(被感染)一些丑陋的部分(因为世界是丑陋和不对称的)。
JavaScript就是这样。只不过它没有从一个漂亮、干净的起点开始,而且在投入使用之前没有时间去完善它。