javascript中的'in'关键字是什么意思?

LIX*_*Xer 5 javascript

我找到了这段代码:

if (!("aa" in window)) {  
    alert('oh my god');
    var aa = 1;  
}  
alert("aa" in window);
alert(aa);
Run Code Online (Sandbox Code Playgroud)

此代码第二个警报是警报true,但是,第三个警报是"未定义",并且"if"中的警报未运行.为什么?

我认为原因是in; 它的作用是什么?

我在谷歌上搜索过,但一无所获,因为谷歌认为"在&srquo; 是一个过滤词.

我们总是使用inin循环,但是,坦率地说,我使用它但是并不真正理解它.

Den*_*ret 15

这将测试window对象是否具有其键为的属性(已填充或未填充)"aa".

此运算符非常有用,因为即使值为undefined:

window.aa = undefined; // or just aa=undefined if you're in the global scope
console.log('aa' in window); // logs true
Run Code Online (Sandbox Code Playgroud)

如果属性不可枚举,它也可以工作:

console.log('length' in []); // logs true
Run Code Online (Sandbox Code Playgroud)

在您的情况下,可能没有aa值,但如果警报显示为true,则将属性添加到window.

MDN参考文献

请注意,该for...in语句的不同之处在于它并不真正使用in运算符,而是一个特定的构造.

MDN参考... in


编辑:对您编辑的问题的解释(与第一个问题非常不同):

你的困惑似乎来自于你var aa = 1;在一个街区中宣布的事实.您应该知道JavaScript中变量的范围是全局范围的函数,并且声明是悬挂的.所以你的代码实际上相当于

var aa = undefined;
if (!("aa" in window)) { // aa is in window, so we don't enter here
    alert('oh my god');
    aa = 1;  
}  
alert("aa" in window); // yes, the property exists, it's true
alert(aa); // aa is still undefined
Run Code Online (Sandbox Code Playgroud)