2015-10-04 45 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([])' –

相關問題