Javascript! Instanceof If заявление - PullRequest
159 голосов
/ 16 января 2012

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

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

Ключ здесь в том, чтобы использовать НЕ!перед экземпляром.Обычно я должен настроить это следующим образом:

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

И немного раздражает необходимость создания оператора else, когда я просто хочу узнать, относится ли объект к определенному типу.

Ответы [ 3 ]

317 голосов
/ 16 января 2012

Заключите в скобки и отрицайте снаружи.

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

В этом случае важен порядок приоритета (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). Оператор! Предшествует оператору instanceof.

70 голосов
/ 12 марта 2013
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, точно так же, как нет оператора !<.

36 голосов
/ 15 июня 2016

Легко забыть скобки (скобки), чтобы вы могли сделать привычку делать:

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
}

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

...