这是一个非常基本的问题,只是为了满足我的好奇心,但是有办法做这样的事情:
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语句有点烦人。
答案 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