为什么Number('')返回0而parseInt('')返回NaN

Rah*_*edi 8 javascript

我在StackOverflow上经历了类似的问题和答案,发现了这个:

parseInt("123hui")
returns 123

Number("123hui")
returns NaN
Run Code Online (Sandbox Code Playgroud)

因为,parseInt()解析到第一个非数字并返回它解析的任何内容并Number()尝试将整个字符串转换为数字,为什么在parseInt('')和的情况下不太可能出现行为Number('').

我觉得理想情况下parseInt应该NaN像它一样回归Number("123hui")

现在我的下一个问题:

作为0 == ''回报true我相信它解释为0 == Number('')哪个是真的.那么编译器真的对待它0 == Number('')并不喜欢0 == parseInt('')或者我错过了一些观点吗?

Jon*_*ski 5

差异部分是由于Number()使用额外的逻辑进行类型强制。包括在它遵循的规则中的是:

  • StringNumericLiteral是空的或仅包含空白被转换为0

parseInt()定义为根据给定或检测到的简单查找和评估输入中的数字字符radix。并且,它被定义为期望至少一个有效字符。

13) 如果S包含一个不是基数R数字的代码单元,设ZS的子串,由第一个这样的代码单元之前的所有代码单元组成;否则,设ZS

14) 如果Z为空,则返回NaN

注意:“ S ”是删除任何前导空格后的输入字符串。


作为0==''回报,true我相信它解释为0==Number('')[...]

使用的规则==被定义为Abstract Equality

而且,您对所使用的强制/转换是正确的。相关步骤是#6:

如果 Type( x ) 是 Number 并且 Type( y ) 是 String,则
返回比较结果x == ToNumber( y )。