Javascript! Instanceof If Statement

Это действительно основной вопрос, действительно, чтобы удовлетворить мое любопытство, но есть ли способ сделать что-то вроде этого:

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, когда я просто хочу знать, является ли объект конкретным типом.

Ответ 2

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

Правильный способ проверить это - как уже ответили другие. Другие две тактики, которые были предложены, не будут работать и должны быть поняты...

В случае оператора ! без скобок.

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
}

Это синтаксическая ошибка. Операторы, такие как !=, являются одним оператором, в отличие от NOT, примененного к EQUALS. Нет такого оператора, как !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
}

Попробуйте здесь