这是一个非常基本的问题,只是为了满足我的好奇心,但是有没有一种方法可以这样做:

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语句有点烦人。


当前回答

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

是正确的方法来检查这个-因为其他人已经回答了。建议的另外两种策略不会起作用,应该加以理解。

在这种情况下!不带括号的运算符。

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

在这种情况下,优先级顺序很重要(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)。!操作符位于操作符实例的前面。因此,!obj首先被赋值为false(它等价于!布尔(obj));然后测试是否为false instanceof Array,显然是负的。

在这种情况下!操作符的实例。

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

这是语法错误。像!=这样的操作符是一个单独的操作符,与应用于EQUALS的NOT相反。没有!instanceof这样的操作符,就像没有!<操作符一样。

其他回答

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

是正确的方法来检查这个-因为其他人已经回答了。建议的另外两种策略不会起作用,应该加以理解。

在这种情况下!不带括号的运算符。

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

在这种情况下,优先级顺序很重要(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)。!操作符位于操作符实例的前面。因此,!obj首先被赋值为false(它等价于!布尔(obj));然后测试是否为false instanceof Array,显然是负的。

在这种情况下!操作符的实例。

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

这是语法错误。像!=这样的操作符是一个单独的操作符,与应用于EQUALS的NOT相反。没有!instanceof这样的操作符,就像没有!<操作符一样。

用圆括号括起来,在外面取负数。

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

在这种情况下,优先级的顺序很重要。 参见:操作符优先级。

!操作符位于操作符实例的前面。

正如其他答案中解释的那样,否定是行不通的,因为:

“优先顺序很重要”

但是双括号很容易忘记,所以你可以养成这样做的习惯:

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

or

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

在这里试试