3

在 Chrome 和 Firefox 上的 JavaScript 中:

isNaN( "\n" )给予false
parseFloat ( "\n" )给予NaN

对于\t,\r和, 产生相同的结果\f

  • \n是一个数字
  • Parsed\n为您提供 Not A Number。
  • 转义字符,如 NULL 字节\0\\并按\"预期工作。
  • 我们知道这NaN是一个数字,只是不能用任何其他值表示
  • 一个数字也是如此\n,这是不可表示的。

为什么浏览器会以这种方式实现它?

4

2 回答 2

7

因为toNumber任何仅包含空格(或者如果它为空)的字符串的转换都会导致0.

console.log(Number("\n")); // 0

这些parseInt/Float方法实际上需要转换一些数字内容,尽管它允许前导空格和尾随垃圾。

console.log(parseFloat("   123.45odsifjj")); // 123.45

toNumber转换在9.3.1 ToNumber中定义,应用于字符串类型。

为空或仅包含空格的 StringNumericLiteral 将转换为 +0

于 2013-05-31T20:26:43.413 回答
0

这是由于调用isNaN. "\n"不是一个(为andNaN指定的值),是一个字符串。floatsdoubles"\n"

编辑: 显然,在调用时isNaN("\n")"\n"首先使用它转换为一个数字ToNumber,它的行为与parseFloat.

然而,W3Cw3schools 对parseFloat说:

如果第一个字符不能转换为数字,则 parseFloat() 返回 NaN。

这就是造成不对称的原因。

于 2013-05-31T20:31:53.587 回答