instanceof的否定会产生意想不到的结果

时间:2013-12-26 20:15:55

标签: javascript

这两个陈述有什么区别?它们提供不同的输出(在谷歌Chrome控制台中)。

function Test() {
    if (this instanceof Test) {

    } else {
        return new Test();
    }
}
x = Test();

测试{}

function Test() {
    if (!this instanceof Test) {
        return new Test();
    }
}
x = Test();

未定义

Mind = boggled

1 个答案:

答案 0 :(得分:6)

问题是!instanceof之前进行评估,因此被视为:

if ((!this) instanceof Test) { ... }

而且,!thistrue还是false,这两个值都不是instanceof Test,阻止了new Test()的返回。

添加分组会强制“不是实例”所需的顺序:

if (!(this instanceof Test)) { ... }