【问题标题】:Javascript redefine Infinity, NaN, or "" as 0 [closed]Javascript 将 Infinity、NaN 或 "" 重新定义为 0 [关闭]
【发布时间】:2014-03-18 03:09:20
【问题描述】:

我有一个 javascript 计算器,它接受用户输入,进行一些数学运算并将结果写入输入字段“#theResult”

由于“#theResult”在 keyup 上更新,有时“#theResult”将返回 Infinity、NaN 或“”,直到所有字段都填写完毕。在填写所有字段之前,我希望“#theResult”返回 0。代码如下:

if (theResult === Infinity || theResult === "" || theResult === NaN) {
    theResult === 0;
}
$("#theResult").val(theResult);

完整代码是here

提前感谢您的帮助!

【问题讨论】:

  • 您在代码中使用 toFixed(...),因此“theResult”变量将始终为字符串。
  • 你最好只使用theResult = theResult || 0;
  • 也就是说,NaN 在等式中使用时具有特殊含义,将其替换为 0 可能是个坏主意。
  • @Ivan Kuckler 因为 toFixed 返回一个字符串,你如何将零附加到一位小数。说要代表 10.50 美元?
  • @zzzBov 我尝试使用 theResult = theResult ||删除 toFixed 后为 0。如果我先进入“价格”字段,仍然会获得 Infinity

标签: javascript jquery


【解决方案1】:

您在本应使用theResult = 0 的地方使用了theResult === 0

=== 用于比较。当您想要更改变量的值时,您可以使用赋值运算符=

就像@zzzzBov 说的,最简单的方法就是用

 theResult = isFinite(theResult) && theResult || 0; // updated

然而,这掩盖了NaN 的微妙之处;如果用户完成并且结果确实是NaN,则表明0 并不正确。

【讨论】:

  • 除了@Pointy 所说的,theResult === NaN 将始终返回 false。你想要的是if (theResult === Infinity || theResult === "" || isNaN(theResult)) {
  • @CaseyFoster 哦,是的,这是非常重要的一点。感谢您的关注!
  • 是的,但仍然:NaN !== NaN 使用 isNaN(NaN) // true
  • 感谢您解释“=”与“===”语法,因为我对 javascript 有点陌生。然而结果 = 结果 || 0 似乎不起作用jsfiddle.net/RqzPk/37,因为它仍然返回 Infinity 或 NaN
  • @HelloWorld 你的 jsfiddle 在我尝试时似乎工作正常。
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2015-12-24
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多