【问题标题】:if condition executing for AND && in javascript, it shouldn't如果条件在 javascript 中执行 AND &&,它不应该
【发布时间】:2020-02-09 00:31:11
【问题描述】:

这是 3 个字段的简单形式,我设置了条件来检查所有字段是否为空。

我在运行时提供了电子邮件输入,但以下情况为真:

if ((inputName.value == null) && (inputEmail.value == null) && (inputDate.value == null)){
console.log('empty fields')
alert('All the fields are mandatory')
return;
}

谁能告诉我这里有什么问题?

【问题讨论】:

  • .value 返回一个字符串,因此永远不会是 null
  • @Andreas 而表达式的计算结果为true。将条件更改为=== 使其正确返回false
  • @Pointy 我知道,我没有说过任何反对这一事实的言论。我只说x.value中的.value将是undefined,因为.value不会为空,而是inputName.value中的字符串o.O
  • 无论字段中的内容如何,​​该表达式都不应计算为真:jsfiddle.net/khrismuc/n632q5j4 在您的问题中添加minimal reproducible example
  • @Andreas 重点是在这种情况下,value 不是字符串。也不是null。您假设这些变量是输入元素。它们不是,也没有value 属性。它是undefined,当使用== 时,它等于null。我猜这些变量是字符串,而不是输入元素。

标签: javascript if-statement conditional-operator


【解决方案1】:

试试这个,而不是用''进行空匹配

if ((inputName.value == '') || (inputEmail.value == '') || (inputDate.value == '')){
  console.log('empty fields')
  alert('All the fields are mandatory')
  return;
}

编辑:将 && 替换为 ||

【讨论】:

  • 我认为这将是更好的代码,但问题是(根据 OP)表达式在不应该的时候被评估为 true。
【解决方案2】:

我看到了两个问题。

首先是value 可能是空字符串。您可以使用 ! 处理空字符串和 null/undefined。

第二个如果所有字段都是强制性的,那么任何缺少的字段都应该触发if语句,因此您需要or,即||

if ((!inputName.value) || (!inputEmail.value) || (!inputDate.value)){
  console.log('empty fields')
  alert('All the fields are mandatory')
  return;
}

然后你应该开始思考如何以一种易于扩展的方式编写它。这样就可以了

    if (anyEmpty([inputName.value, inputEmail.value, inputDate.value])){
      console.log('empty fields')
      alert('All the fields are mandatory')
      return;
    }

function anyEmpty(arr) {
  arr.forEeach(str => {
    if (!str) {
      return true;
    }
  }

  return false;
}

【讨论】:

  • 解决方案 ||在目前的情况下对我不起作用。但是检查 anyEmpty 对我来说是新事物。你能说出 => 是什么意思吗?我以后可能需要它。
【解决方案3】:

有几种方法可以检查 Javascript 中的字符串是否为空。我喜欢检查它的长度是否为0。

let inputNameNotEmpty = {value: "test"}
let inputName = {value: ""}
let inputEmail = {value: ""}
let inputDate = {value: ""}

// here, the length is 0. which, in javascript, can be evaluated as a boolean ( false in this case ). That's why we add the boolean operator ! in front of each check.
if (!inputName.value.length && !inputEmail.value.length && !inputDate.value.length){
  console.log('all empty fields')
} else {
  console.log('some fields are empty')
}

【讨论】:

  • 哇,这是新的,我一定会试试这个检查。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多