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
}
ここで試してみて
