我们可以解释一下这种奇怪的JS行为吗?

时间:2018-07-14 16:08:42

标签: javascript javascript-objects

我已经在控制台中尝试了以下操作

var someVar1 = 1;
someVar1;            // 1
someVar1 in window;  // true

var someVar2 = 2;
someVar2 in this;    // true
someVar2 in window;  // true

delete someVar1;
someVar1;            // 1
someVar1 in window;  // true

this === window;     // true

var someVar3 = 3;
someVar3 in window;  // false
someVar3;            // 3
someVar3 in window;  // false

someVar3 in window为什么要评估false

在Chrome 67.0.3396.99版浏览器上执行的测试。

1 个答案:

答案 0 :(得分:4)

问题

您期望someVar3 in window返回true。您没有得到true,因为您正在使用in运算符,其值是someVar3(即3),而不是其标识符"someVar3"

您的代码示例归结为:

var someVar1 = 1;
var someVar3 = 3;

console.log(someVar1 in window);
console.log(someVar3 in window);

您实际上是在检查1 is in window3 is in window。并且window[1]返回window,而window[3]undefined(在您的控制台中尝试)。


安全存在检查

要检查变量是否已声明和定义,可以执行以下操作:

window.someVar1

或者如果您在示波器内,则可以使用:

typeof someVar1 !== "undefined"

有关为何window[1]返回Window

的更多信息
  

window[0]window[1]等...返回帧中对Window对象的引用。有关更多详细信息,请参见Window.frames

     

-MDN web docs