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

时间:2019-04-01 15:48:50

标签: javascript

我正在尝试编写一个辅助函数,该函数会将String的{​​{1}}转换为<input type="text" />

由于我不确定是使用Number还是parseFloat(str),所以我仔细检查了它们如何处理可能存在问题的参数。

请参阅:

Number(str)

console.log(Number(null)); // 0 console.log(parseFloat(null)); // NaN console.log(parseInt(null)); // NaN console.log(isNaN(null)); // falseparseFloat都返回parseInt,而NaN返回Number0在这里与Number更加连贯。

那是为什么?

4 个答案:

答案 0 :(得分:3)

Number构造函数尝试将参数强制为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

答案 1 :(得分:2)

  • 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应用于其自变量,如果结果为true,则返回NaN。由于Number(null)+0,所以isNaN(null)false

希望这能为您提供一些启示...

答案 2 :(得分:0)

NaN代表“非数字”。 ParseFloat和ParseInt返回实数和整数,因此就像该函数返回的错误一样。另一方面,Number()表示对象的。例如,Number(false)将输出0。

答案 3 :(得分:0)

parseIntparseFloat的工作原理似乎很微妙:

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

  

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