ウェブサイト検索

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文を作成しなければならないのは少し面倒です。

回答 #1

かっこで囲み、外側で否定する。

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

この場合、優先順位の順序が重要です。参照:演算子の優先順位。

! 演算子は instanceof 演算子の前に置かれます。

回答 #2

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 のような演算子は存在しないのと同様に、!< 演算子も存在しません。

回答 #3

他の回答で説明されているように、否定がうまくいかないのは次の理由です:

「優先順位は重要です」

しかし、二重かっこを忘れがちなので、次のようにする習慣をつけることができます:

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
}

ここで試してみて

関連記事