2012-01-16 11 views
107

場合、これはちょうど私の好奇心を満たすために本当に基本的な質問ですが、このような何かをする方法があります:ここJavascriptがinstanceofは声明

if(obj !instanceof Array) { 
    //The object is not an instance of Array 
} else { 
    //The object is an instance of Array 
} 

キーは、NOTを使用することができること!インスタンスの前に

if(obj instanceof Array) { 
    //Do nothing here 
} else { 
    //The object is not an instance of Array 
    //Perform actions! 
} 

そして、私は単にオブジェクトが特定の型であるかどうかを知りたいときelse文を作成する必要が迷惑その少し:通常私はこれを設定する必要があります方法は、このようなものです。

答えて

236

括弧内は囲み、外側はネゲートします。

if(!(obj instanceof Array)) { 
    //... 
} 
+8

それを試してみてください - 私はあなたが括弧を必要としているかどうか確信しています。クロム、IE、ノードでそれらを試しました。 –

+0

@ riship89の括弧が必要です。証明: '' !! obj instanceof Array''はfalse(不正)を返しますが、 '' !!(obj instanceof Array) ''は真を返します(正しい) – zamnuts

+8

その理由は、!objが最初に評価された(!obj instanceof配列) true(またはfalse)であり、これは(bool instanceof Array)(明らかにfalse)の場合になります。したがって、提案されるように括弧で囲みます。 – ronnbot

57
if (!(obj instanceof Array)) { 
    // do something 
} 

これをチェックするための正しい方法です - 他の人が既に答えているよう。提案されている他の2つの戦術は機能しませんし、理解する必要があります...

括弧のついていないオペレータの場合は、!です。

if (!obj instanceof Array) { 
    // do something 
} 

この場合、優先順位は重要です(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)。 !演算子は、instanceof演算子に先行します。したがって、!objfalseと最初に評価されます(! Boolean(obj)に相当)。明らかに否定的なものであるかどうかは、false instanceof Arrayかどうかをテストしています。

instanceofオペレータの前に!オペレータの場合。

if (obj !instanceof Array) { 
    // do something 
} 

これは構文エラーです。 !=のような演算子は、EQUALSにNOTを適用するのではなく、単一の演算子です。 !<演算子と同じ方法で!instanceofという演算子はありません。

+0

NB。私はセルジオの答えに対してこれを明らかにしたが、私はSOのメンバーではなかったので、コメントするのに十分な評判ポイントはなかった。 – chrismichaelscott

+4

問題の理由(このようなもの)が受け入れられるべき理由を説明する答えのみ... –

+0

@chrismichaelscott私の意見では、私は一人ではないと確信しています。あなたのような答えは、誰でもここで質問しています。その点まではっきりしており、提示された問題を取り巻く十分な情報と事例を共有しています。どうもありがとう。そして私はあなたが評判に値すると受け入れられた答えだったはずだと思います。 – cram2208

18

括弧(かっこ)を忘れがちですので、あなたがやっての習慣を作ることができます。

if(obj instanceof Array === false) { 
    //The object is not an instance of Array 
} 

または

if(false === obj instanceof Array) { 
    //The object is not an instance of Array 
} 

hrishikeshp19 @here

+0

実際は私の否定よりもきれいに見えます。 –