2012-04-27 23 views
2

私のタイトルを明確にするために、オブジェクトがString、Number、Boolean、または他の定義済みのJavaScriptオブジェクトではないことを判断する方法が必要です。頭に浮かぶ一つの方法はこれです:Javascriptでオブジェクトが「カスタム」であることを確認するにはどうすればよいですか?

if(!typeof myCustomObj == "string" && !typeof myCustomObj == "number" && !typeof myCustomObj == "boolean") { 

私はこのように、myCustomObjがオブジェクトであるかどうかを確認することができます:

if(typeof myCustomObj == "object") { 

このtypeof new String("hello world") == "object")があるように、これが唯一の、しかし、プリミティブ値のために働きます本当。

オブジェクトがではないかどうかを判断する信頼できる方法は、の定義済みJavaScriptオブジェクトですか?

+2

可能二重にそれをしない方法である[私はJavaScriptでオブジェクトの型の名前を取得する方法は?](http://stackoverflow.com/questions/332422/how -do-i-get-the-object-type-in​​-javascript)または[JSオブジェクトタイプをチェックする最も正確な方法は?](http://stackoverflow.com/questions/7893776/the最も正確な方法 - チェック - js-object-type) –

+0

これはちょうど公正ではありません。オブジェクトの名前をチェックするとタイプを見つけることができます。私は "名前を取得"を検索していないだろう、私は "タイプを取得"を検索していただろう。 :I –

+0

私は* "javascript type of object" *を探しました。 –

答えて

5

ここだがjQueryののjQuery.isPlainObject()

function (obj) { 
    // Must be an Object. 
    // Because of IE, we also have to check the presence of the constructor property. 
    // Make sure that DOM nodes and window objects don't pass through, as well 
    if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { 
     return false; 
    } 

    try { 
     // Not own constructor property must be Object 
     if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { 
      return false; 
     } 
    } catch(e) { 
     // IE8,9 Will throw exceptions on certain host objects #9897 
     return false; 
    } 

    // Own properties are enumerated firstly, so to speed up, 
    // if last one is own, then all properties are own. 
    var key; 
    for (key in obj) {} 

    return key === undefined || hasOwn.call(obj, key); 
} 
+1

"nodeType"というプロパティの単なる存在が、その関数をfalseにすることはかなり弱いと私は考えます。 (これはjQueryに関するコメントであり、あなたの答えではありません: – Pointy

+0

これは他のjQuery関数、特に 'jQuery.type'も呼び出します。あなたはその機能を掘り起こすことができますか?ありがとう。 –

+1

@ElliotBonneville:[jQueryソースビューア](http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.isPlainObject)を参照してください。それは他のjQuery関数にリンクします: - P –

4

あなたはObjectプロトタイプの「のtoString」functonを使用することができます。

var typ = Object.prototype.toString.call(someTestObject); 

ビルトインタイプのための「[オブジェクトの文字列]」または「[オブジェクトの日付]」のような答えを提供します。残念ながら、単純なObjectインスタンスとして作成されたものとコンストラクタで作成されたものの区別はできませんが、実際にはそれほど大きな違いはありません。

+0

残念ながら、組み込み型とは異なるカスタムプロパティを持つ単純なObjectインスタンスを検出する必要があるため、これが私にとってうまくいくかどうかはわかりません。 –

+0

jQueryのアプローチの答えはかなり徹底的です。 – Pointy

+0

'Object.prototype.toString.call($())'は '[object Object]'を返しますが、 '$ .isPlainObject($())'は 'false'を返します。ちょうどFYI :-P +1これは、あなたが本当に具体的である必要がない限り、ほとんどの場合に動作するはずです。 –

関連する問題