JavaScript中Number("NaN")返回NaN的原因疑问
JavaScript中Number("NaN")返回NaN的原因疑问
嘿,这个问题问得真的很细致!咱们把这事儿掰扯明白~
其实Number("NaN")返回NaN,和Number("potato")那种解析失败的情况不一样,反而更贴近Number("Infinity")的逻辑——它是被JavaScript主动识别为特殊数值的!
咱们拆解下核心区别:
- 对于
Number("Infinity"),JavaScript会直接认出这个字符串对应的是预定义的特殊数值Infinity,所以顺理成章完成转换。 - 而
Number("NaN")也是同理:ES规范里明确规定,当Number函数处理的字符串是精确的"NaN"(必须大小写完全匹配,比如"nan"或"Nan"就会变成解析失败的NaN)时,会直接返回NaN这个特殊数值,这是主动的、符合规则的转换,并非解析出错。 - 但像
"potato"这类字符串,JavaScript完全找不到任何能映射的合法数值,只能返回NaN,这属于解析失败导致的NaN,和前者的逻辑本质不同。
简单总结就是:"NaN"是被“点名”转换成NaN的,而"potato"是因为转不动才被迫返回NaN的~
备注:内容来源于stack exchange,提问作者rasmusrj
相关产品推荐
相关产品推荐

