Javascript!instanceof If Statement

时间:2012-01-16 04:48:52

标签: javascript instanceof

这是一个非常基本的问题,只是为了满足我的好奇心,但是有办法做这样的事情:

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

3 个答案:

答案 0 :(得分:309)

括在括号中并在外面否定。

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

在这种情况下,优先顺序很重要(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)。的!运算符在instanceof运算符之前。

答案 1 :(得分:69)

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
}

这是语法错误。诸如!=之类的运算符是单个运算符,而不是应用于EQUALS的运算符。没有!instanceof这样的运算符与没有!<运算符的方式相同。

答案 2 :(得分:34)

很容易忘记括号(括号),这样你就可以养成这样做的习惯:

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
}

尝试 here