Javascript中的通用is_blank?

Zek*_*eke 4 javascript ruby-on-rails

我正在寻找一个与Rails的Object.blank相当的跨浏览器兼容的Javascript?(及其对应的Object.present?),它为空对象,空数组,空字符串以及null和undefined值返回true.有没有人见过这样的事情?我可以自己写,但我知道有一些IE陷阱,我认为其他人可能已经解决了这个问题.

Mar*_*all 6

我只是一起鞭打了这个.没有在任何浏览器上测试它,只需在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;
}
Run Code Online (Sandbox Code Playgroud)

所以...

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
Run Code Online (Sandbox Code Playgroud)

编辑:添加一个catch,以便true和false返回为非空白.如果您想将false视为空白,则更改它.

编辑2:最后一次改变!阻止blank(0)返回true.但是允许NaN被认为是空白的.