web-dev-qa-db-ja.com

Javascript!instanceof Ifステートメント

これは本当に私の好奇心を満たすための本当に基本的な質問ですが、このようなことをする方法はありますか?

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ステートメントを作成する必要があるのは少し面倒です。

164
ryandlf

括弧で囲み、外側で否定します。

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

この場合、優先順位は重要です( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence )。 !演算子はinstanceof演算子の前にあります。

323
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演算子の前にあります。したがって、!objは最初にfalseに評価されます(! Boolean(obj)と同等です); false instanceof Arrayかどうかをテストしています。これは明らかに負です。

instanceof演算子の前の!演算子の場合。

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

これは構文エラーです。 !=などの演算子は、EQUALSに適用されないNOTとは対照的に、単一の演算子です。 !instanceof演算子がないのと同じように、!<のような演算子はありません。

71

括弧(括弧)を忘れがちなので、習慣を付けることができます。

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
}

試してみてくださいここ

38
Wilt