我在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('')或者我错过了一些观点吗?
差异部分是由于Number()使用额外的逻辑进行类型强制。包括在它遵循的规则中的是:
- 甲StringNumericLiteral是空的或仅包含空白被转换为0。
而parseInt()定义为根据给定或检测到的简单查找和评估输入中的数字字符radix。并且,它被定义为期望至少一个有效字符。
13) 如果S包含一个不是基数R数字的代码单元,设Z是S的子串,由第一个这样的代码单元之前的所有代码单元组成;否则,设Z为S。
14) 如果Z为空,则返回NaN。
注意:“ S ”是删除任何前导空格后的输入字符串。
作为
0==''回报,true我相信它解释为0==Number('')[...]
使用的规则==被定义为Abstract Equality。
而且,您对所使用的强制/转换是正确的。相关步骤是#6:
如果 Type( x ) 是 Number 并且 Type( y ) 是 String,则
返回比较结果x == ToNumber( y )。