2015-10-04 44 views
3

在我的例子中有数据可能与任何类型相同(Object,String,Array,...)。如果字符串是否有其他最佳方法检查falsy值?

但是,有时数据返回字符串的falsy值(如"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 
//... 

有没有另一种最佳方式?有任何想法吗?

+4

使用'的'==代替''=== – Jackson

+1

@Jackson。你是在说'数据==假'。好主意 –

+1

'!! String(data).replace(/(null)|(false)|(0)|(undefined))/ g,“”)' – dandavis

回答

0

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

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 
 
//...

+1

,而这确实有效,任何必须阅读和维护您的代码的同事都不会喜欢你 –

+0

是否有任何错误的逻辑。请解释我,为什么? –

+0

这是不可读的imho。在TinyGiant的回答中,很明显第一次看的功能是什么,这里不是那么多 –

2

如果该值不在数组中,则可以使用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!']);

+0

感谢您的回答,特别是对于'test([])' –

相关问题