在javascript中防止/处理除以0的最佳方法

dib*_*ibs 23 javascript divide-by-zero

什么是在接受用户输入的javascript中防止除以0的最佳方法.如果没有特定的方法来实现这一点,那么处理这种情况的最佳方法是什么,以免阻止其他脚本执行?

任何见解都非常感谢.

Mik*_*uel 20

普通//=运营商无法做到这一点.

做你想要的最好的方法就是守卫:

function notZero(n) {
  n = +n;  // Coerce to number.
  if (!n) {  // Matches +0, -0, NaN
    throw new Error('Invalid dividend ' + n);
  }
  return n;
}
Run Code Online (Sandbox Code Playgroud)

然后像师一样做

numerator / notZero(denominator)
Run Code Online (Sandbox Code Playgroud)

或者,您可以始终保护输出

function dividend(numerator, denominator) {
  var quotient = numerator / denominator;
  if (quotient !== quotient) { throw new Error(numerator + " / " + denominator); }
  return quotient;
}
Run Code Online (Sandbox Code Playgroud)

但这会失去可读性和表现力/=.

  • 除非你需要非常高效的代码,否则我会使用`if(n === 0 || isNaN(n)){...}`.事实上,我会忘记处理NaN案件.我知道强制是语言的一部分,但对于IMO来说,它仍然是一个坏主意.还是`dividend!== dividend`?怎么样的'isNaN(股息)`? (5认同)

mae*_*ics 5

在我的头顶,你可以:

  1. 检查用户输入以查看分母是否为零(或评估为零,具体取决于您的脚本实际执行的操作).
  2. 检查操作的结果isFinite()是否正确处理.


am2*_*429 5

处理这种情况的最佳方法是什么,以免阻止其他脚本执行

除以零似乎不会阻止其他脚本在 JavaScript 中执行:

var a = 20;
var b = 0;
var result = a/b;
console.log(result); // returns Infinity
Run Code Online (Sandbox Code Playgroud)

如果您希望在除以零的情况下发生不同的事情,您可以使用

function divideIfNotZero(numerator, denominator) {
  if (denominator === 0 || isNaN(denominator)) {
        return null;
  }
  else {
        return numerator / denominator;
  }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*rez 5

希望这有用

(denominator != 0 ? numerator/denominator : Infinity)
Run Code Online (Sandbox Code Playgroud)

或者您想在最后添加的任何值。

问候。