为什么“\ n”是Javascript中的数字“NaN”

时间:2013-05-31 20:24:02

标签: javascript parsing nan control-characters

在Chrome和Firefox上的JavaScript中:

isNaN( "\n" )提供false
parseFloat ( "\n" )提供NaN

\t\r\f也是如此。

  • \n是一个数字
  • Parsed \n给你的不是数字。
  • 诸如NULL字节\0\\\"等转义字符可以按预期工作。
  • 我们知道NaN是一个数字,只是无法用任何其他值表示
  • 所以\n是一个数字,这是不可表示的。

为什么浏览器会这样实现?

2 个答案:

答案 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(为floatsdoubles指定的值),"\n"是一个字符串。

修改 显然,在致电isNaN("\n")时,"\n"首先使用ToNumber转换为数字,parseFloat的行为与{{1}}完全相同。

然而, W3C w3schools对parseFloat说:

  

如果第一个字符无法转换为数字,parseFloat()将返回NaN。

这是导致不对称的原因。