【问题标题】:Simplify checking "null or empty" for multiple variables in IF statement简化在 IF 语句中检查多个变量的“null 或 empty”
【发布时间】:2017-08-12 19:34:56
【问题描述】:

我在验证函数中有两个字符串变量,应该确保变量不会同时为空或为空(不允许一个为空而另一个等于空的情况)。

当前的 IF 语句非常复杂,我必须检查一下:

  1. 如果两者都为空
  2. 如果两者都是空的(如果它们的长度等于 0)
  3. 如果 string1 为 null 而 string2 为空
  4. 如果 string1 为空且 string2 为空

它功能强大但丑陋,而不是“最佳实践”。如何简化?

if ((string1==null && string2==null) || (string1.length==0 && string2.length==0) || (string1==null && string2.length==0) || (string2==null && string1.length==0))

【问题讨论】:

  • 你可以使用type coercion and falsy values:if (string1 && string2) { ... }
  • 抛开场景,我提供了足够的信息,我希望我的问题很清楚。只需要最佳实践方法来简化这个长 if 条件。

标签: javascript string if-statement null conditional-statements


【解决方案1】:

如果null 或为空,您可以先检查一个变量,然后再检查另一个变量,然后用 AND 连接两个结果。

if ((string1 === null || string1 === '') && (string2 === null || string2 === '')) {
    // both null or empty
}

如果你只有其他真值,你可以使用

if (!string1 && !string2) {
    // both falsy
}

【讨论】:

    【解决方案2】:

    您可以使用函数来提高可读性,例如:

    function isEmpty(param){
      if(param==null || param.lenght==0)
        return true;
      else
        return false;
    }
    
    var string1, string2;
    
    //And you if becomes:
    if(isEmpty(string1) || isEmpty(string2)){
      //[...]
      console.log('String1 & String2 are empty');
    }

    希望对你有帮助,再见。

    【讨论】:

      【解决方案3】:

      我认为最好的解决方案是按顺序检查这些条件。首先检查null,然后检查字符串是否不是empty,最好的方法是将字符串与空字符串进行比较,这样可以避免在undefined 上使用.length 时出现异常。

      所以使用if(string1 === '') 而不是写if(string1.length==0)

      解决方案:

      那么你可以简单地使用以下条件:

      if (!string1 || !string2 || string1 === '' || string2 === ''){
           //Your code here
      }
      

      说明:

      如果两个字符串之一是nullempty,则为true,换句话说,如果四个条件中的任何一个为true,它将进入 if 块。

      【讨论】:

      • 我以为 !string1 也会检查 string1 !== ''
      • @DylanHunt 如果string1 = ''!string1 给出true,而str !== '' 给出false
      【解决方案4】:

      也许写一个辅助函数:

      function stringIsNotValid(val) {
          return val == null || val.length == 0;
      }
      
      if(stringIsNotValid(val1) && stringIsNotValid(val2)) { ... }
      

      但如果可以是简化的

      if((string1 == null || string1.length == 0) && (string2 == null || string2.length == 0))
      

      【讨论】:

      • 真的!!我认为您应该切换条件以避免string1.lengthstring2.length 出现异常。
      • 谢谢,已修复。
      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2014-11-10
      • 2013-04-18
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多