JavaScript if语句仅评估第一个条件

时间:2014-02-06 11:43:06

标签: javascript

我的if语句仅评估第一个条件,第二个条件评估在||之后被忽视了。如何解决这个问题?

function validateAge(input) {
  if ((input.value < 0 || input.value > 110) || (input.value.match(/[^0-9]/))) {
    input.setCustomValidity("Dozwolony zakres: od 0 do 110");
  } else {
    input.setCustomValidity("");
  }
}

1 个答案:

答案 0 :(得分:6)

嗯,有一种叫做lazy evaluation的东西。如果没有必要,JavaScript解释器将不会评估某些内容。在析取(||)时,当第一个语句求值为true时,整个表达式为真,这就是为什么当JavaScript解释器评估:(input.value < 0 || input.value > 110)为真时,没有必要计算(input.value < 0 || input.value > 110)

的值

如果(input.value.match(/[^0-9]/))是“显示停止”,您可以按以下方式继续:

if ((input.value.match(/[^0-9]/)) || (input.value < 0 || input.value > 110))

如果我理解正确,你需要这样的东西:

function validateValue(input) {
  var value = input.value;
  if (/^\d+$/.test(value)) {
    value = parseInt(value, 10);
  } else {
    return false;
  }
  return value < 0 || value > 110;
}