2011-10-24 9 views
3

RailsのObject.blankに相当するクロスブラウザ対応のJavascriptを探していますか?空のオブジェクト、空の配列、空の文字列、およびnull値と未定義値に対してtrueを返すオブジェクト(およびその対応オブジェクト、Object.present?)誰もそのようなことを見たことがありますか?私はそれを自分で書くことができましたが、私はいくつかのIEの落とし穴があることを知っています。Javascriptで万能is_blank?

+1

空のオブジェクトはJavaScriptで扱いにくいことがあります。私はそれに何かIEの問題があるとは思わない。 – Pointy

+1

ルビーから来て、これは私にとって "本当の疑問"のようです。また、質問には、目的の動作の完全な仕様が含まれているため、あいまいでもあいまいでもありません。この質問は、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 

編集:真と偽のブランクではないとして戻ってくるようにキャッチを追加しました。 falseを空白とみなしたい場合は、それを変更します。

edit 2:最後に変更!ブランク(0)が真を返すことを防ぎます。しかし、NaNを空白と見なすことができます。