在Chrome和Firefox上的JavaScript中:
isNaN( "\n" )
提供false
parseFloat ( "\n" )
提供NaN
\t
,\r
和\f
也是如此。
\n
是一个数字\n
给你的不是数字。\0
,\\
和\"
等转义字符可以按预期工作。NaN
是一个数字,只是无法用任何其他值表示\n
是一个数字,这是不可表示的。为什么浏览器会这样实现?
答案 0 :(得分:7)
因为只包含空格的任何字符串的toNumber
转换(或者如果它为空)会导致0
。
console.log(Number("\n")); // 0
parseInt/Float
方法实际上需要转换某些数字内容,但它会允许前导空格和尾随垃圾。
console.log(parseFloat(" 123.45odsifjj")); // 123.45
toNumber 转换在9.3.1 ToNumber Applied to the String Type中定义。
StringNumericLiteral为空或仅包含空格将转换为+0
答案 1 :(得分:0)
这是因为您致电 isNaN
时动态输入。 "\n"
不是NaN
(为floats
和doubles
指定的值),"\n"
是一个字符串。
修改强>
显然,在致电isNaN("\n")
时,"\n"
首先使用ToNumber
转换为数字,parseFloat
的行为与{{1}}完全相同。
然而, W3C w3schools对parseFloat说:
如果第一个字符无法转换为数字,parseFloat()将返回NaN。
这是导致不对称的原因。