【问题标题】:Are there other optimum way to check falsy value if it is String?如果它是字符串,是否还有其他最佳方法来检查虚假值?
【发布时间】:2015-10-04 20:47:31
【问题描述】:

在我的示例中,它可能等于任何类型(Object、String、Array、...)的数据。

但是,有时数据返回字符串假值(如"false""undefined""0""null")。它应该从条件返回 false。

var Helper = {
  isEmpty: function(data){
      return !data || data === "false" || data === "null" || data === "undefined" || data === "0" || data === "NaN";
  }
}
console.log(Helper.isEmpty("false"));//true
console.log(Helper.isEmpty("null"));//true
//...

还有其他最佳方法吗?有什么想法吗?

【问题讨论】:

  • 使用== 而不是===
  • @杰克逊。你是说data == false。好主意
  • !!String(data).replace(/((null)|(false)|(0)|(undefined))/g,"")
  • !!String(data).replace(/null|false|undefined|0|NaN/,""); 会更准确、更短。不需要所有那些您没有使用其结果的捕获组。 @dandavis

标签: javascript jquery


【解决方案1】:

您可以使用Array.indexOf()在数组中搜索指定的值,如果该值不在数组中,则返回值为-1。

var Helper = {
  isEmpty: function(data){
    return data ? ["false","null","undefined","0","NaN"].indexOf(data) !== -1 : true;
  }
}

function test(a) {
  for(var i = 0; i < a.length; ++i) console.log(a[i] + ' isEmpty: ' + Helper.isEmpty(a[i]));
}

test([false,'false','null','undefined','0','NaN','Hello World!']);

【讨论】:

  • 感谢您的回答,尤其是test([])
【解决方案2】:

已编辑:我找到了一些解决方案:

1) 更短更智能的方式:/false|NaN|undefined|0|null/.test(data);

   var Helper = {
        isEmpty: function (data) {
            return /false|NaN|undefined|0|null/.test(data);
        }
    };
    console.log(Helper.isEmpty("false"));//true
    console.log(Helper.isEmpty(false));//true
    console.log(Helper.isEmpty("null"));//true
    console.log(Helper.isEmpty("test"));//false
    //...

2) 或者,通过对象检查:

var Helper = {
  isEmpty: function(data){
      return !!{false:1, null:1, undefined:1, NaN:1, 0:1}[data] || !data;
  }
}
console.log(Helper.isEmpty("false"));//true
console.log(Helper.isEmpty("null"));//true
//...

【讨论】:

  • 虽然这确实有效,但任何必须阅读和维护您的代码的同事都不会喜欢您
  • 有什么不好的逻辑。请解释一下,为什么?
  • 恕我直言,这不是很可读。在 TinyGiant 的回答中,很明显该函数在第一眼看到时的作用,这里没有那么多
猜你喜欢
  • 2019-01-21
  • 1970-01-01
  • 2011-05-30
  • 2020-07-11
  • 1970-01-01
  • 2018-08-27
  • 2017-08-26
  • 2019-01-04
  • 2022-01-03
相关资源
最近更新 更多