2011-10-24 44 views
3

我正在尋找一個與Rails的Object.blank相當的跨瀏覽器兼容的Javascript? (及其對應物Object.present?),它爲空對象,空數組,空字符串以及空值和未定義值返回true。有沒有人看過這樣的事情?我可以自己寫,但我知道有一些IE陷阱,我認爲別人可能已經解決了這個問題。Javascript中的多用途is_blank?

+1

空對象在JavaScript中可能會很棘手。我不認爲有類似的東西有任何IE問題。 – Pointy

+1

來自ruby,這對我來說似乎是一個「真正的問題」。此外,該問題還包含所需行爲的完整規範,因此它不是「模棱兩可」或「模糊」。我也許可以看到這個問題被封閉爲「太寬泛」或「不完整」,因爲OP沒有分享他們的研究。 –

回答

3

我剛纔一起鞭打。沒有在任何瀏覽器上測試它,只是在Node.js中運行它。但我認爲應該工作。

function blank(obj) { 
    var cache; 

    if((cache = typeof obj) !== 'boolean' && (cache !== 'number' || isNaN(obj)) && !obj) 
     return true; 
    if(cache == 'string' && obj.replace(/\s/g, '').length === 0) 
     return true; 
    if(cache == 'object') { 
     if((cache = toString.call(obj)) == '[object Array]' && obj.length === 0) 
      return true; 
     if(cache == '[object Object]') { 
      for(cache in obj) { 
       return false; 
      } 
      return true; 
     } 
    } 

    return false; 
} 

所以......

blank([]) 
// true 
blank({}) 
// true 
blank({ x: 123 }) 
// false 
blank('') 
// true 
blank(' ') 
// true 
blank(' asdf') 
// false 
blank() 
// true 
var x; blank(x) 
// true 
var x = 12; blank(x) 
// false 
blank(true) 
// false 
blank(false) 
// false 
blank(0) 
// false 
blank(NaN) 
// true 

編輯:添加一個catch,使真假回來的不是空白。如果你想假的被認爲是空白的,那就改變它。

編輯2:最後的改變!防止空白(0)返回真實。但是讓NaN被認爲是空白的。