为什么 Number(null) 返回 0,而 parseFloat(null) 返回 NaN



我正在尝试编写一个辅助函数,该函数将从<input type="text" />转换为NumberString

由于我不确定是使用parseFloat(str)还是Number(str)我仔细检查了他们如何处理潜在的问题论点。

看:

console.log(Number(null)); // 0
console.log(parseFloat(null)); // NaN
console.log(parseInt(null)); // NaN
console.log(isNaN(null)); // false

parseFloatparseInt 都返回NaN,而Number返回0Number在这里似乎与isNaN(null)更加连贯.

为什么?

Number构造函数试图将参数强制为数字。所以空字符串 ''、falsenull 和所有虚假值都变为 0。

同样,Number(true)将返回 1。 Number('some string')将被NaN,因为"某些字符串"无法转换为数字。

请注意,正如注释中指出的,Number(undefined)在算术运算中是 NaN 而不是 0。(在这里阅读 https://codeburst.io/understanding-null-undefined-and-nan-b603cb74b44c(

在此处阅读更多内容: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

  • parseInt/Float将他们的参数转换为字符串,从左侧逐个字符读取它,并尝试从他们找到的内容中生成一个数字。由于String(null)"null"并且十进制数不能以"n"开头,因此parseInt(null)将被NaN。如果提供不同的基数,其中 nul 是数字,则结果将有所不同:

console.log(parseInt(null, 32))

  • Number将其参数作为一个整体转换为一个数字。 Number(null)返回+0,因为ECMA委员会希望它:http://www.ecma-international.org/ecma-262/7.0/#sec-tonumber。这可能是出于历史原因。

  • 全局isNaN(不要与Number.isNaN混淆(Number应用于其参数,如果结果NaN则返回true。由于Number(null)+0isNaN(null)false

希望这能带来一些启发...

NaN 代表 "Not a Number"。ParseFloat 和 ParseInt 返回实数和整数,所以这就像函数返回的错误。另一方面,Number(( 表示对象的。例如,Number(false( 将输出 0。

原因似乎与parseIntparseFloat的工作方式非常微妙:

如果传递给 parseInt/parseFloat 的参数不是String(null 不是(,则它调用返回 "[object Undefined]"toString(null)

如果第一个字符无法转换为数字,parseInt 将返回 NaN。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

最新更新