我找到了这段代码:
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.
请注意,该for...in语句的不同之处在于它并不真正使用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)