【问题标题】:Why parseInt(Infinity) returns NaN and parseFloat(Infinity) returns infinity?为什么 parseInt(Infinity) 返回 NaN 而 parseFloat(Infinity) 返回无穷大?
【发布时间】:2016-11-16 08:50:30
【问题描述】:

导致这两个函数对于值 infinity 和 -infinity 的行为不同的原因可能是什么。有没有人发现这种不一致很有用?

parseInt(Infinity); // NaN
parseFloat(Infinity); // Infinity

【问题讨论】:

标签: javascript type-conversion nan infinity


【解决方案1】:

这个问题的答案在这两个函数的规范中是正确的:

parseInt 采用 字符串 参数。

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

parseFloat

parseFloat 也可以解析并返回 Infinity 值。您可以使用 isFinite 函数来确定结果是否为有限数(不是 Infinity、-Infinity 或 NaN)。

parseInt 无法返回 infinity,因为 infinity 不在 JavaScript 的整数范围内。而它在浮点范围内是有效的。

至于有用?我不能说。在我工作的域中,NaN 表示发生了错误,我不相信我曾经使用过infinity

【讨论】:

  • takes a string parametercannot be converted to a number, 不一定是正确的解释。 Number('Infinity') 是一个表示 Infinite 的数字,parseFloat 也接受一个字符串 parseFloat('Infinity')。而Infinity.toString(); 将产生"Infinity",所以parseInt(Infinity) 将产生parseInt("Infinity")
  • Infinity 不在 JavaScript 的整数范围内。为什么? 888888888888888888888888888888888888888888898899999999999999999999999 之类的数字应该是无穷大吧?
  • @Devashish JS 中的最大安全整数是9007199254740991,上面的一切都只是浮点精度。 Number.MAX_SAFE_INTEGER
  • @t.niese 有时 JS 的行为简直令人难以置信。谢谢:)
  • @Devashish 在其他语言中不会有什么不同。 Integers 等非浮点数不能表示 Infinite,因此如果您请求 Integer,则无法获得 Infinite。
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 2015-12-24
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多