gpt4 book ai didi

javascript - 在全局 "for in"对象上使用 "this"循环的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 15:44:50 25 4
gpt4 key购买 nike

有人可以解释一下是什么原因导致全局 this 对象上的 for-in 循环出现这种奇怪的行为吗?

在全局空间中,做

for(var key in this) key;

结果是,this 获取被分配了一个新属性 key,其值为 “key”

这发生在nodejs和rhino js引擎中,但在浏览器中结果是 - window被分配了一个新属性key,其值为 “调度事件”

我认为这是直接在控制台中键入的一些副作用,但如果您使用此命令在没有控制台的脚本中运行它,它会产生相同的效果。

$ node -e "for (var key in this) key; process.stdout.write(this.key + '\n')"

然后我认为这与 for 循环的主体有关 key; 但当你这样做时也会发生同样的事情

for (var key in this) console.log(key);

我不明白的是

  1. 为什么this被赋予一个新属性?

  2. 为什么即使我从未给出任何字符串值,该值也是字符串?

  3. 另外,为什么在浏览器中会有所不同? (如果不言自明,请给出 1 和 2 的答案)

最佳答案

why is this given a new property?

var key // == this.key in the global scope.

因为this是全局作用域,浏览器中的window,nodejs中的global,当你在全局作用域中声明一个变量时将被添加到全局范围,这是非常有意义的。

why is the value a string even I never give any string values?

因为 for ... in 将对象可枚举属性名称枚举为字符串。现在您将获得 dispatchEvent 因为它是其中的最后一个枚举属性。

Also, why is it different in a browser? (if not self explanatory given answers for 1 and 2)

在浏览器中有何不同?浏览器具有完全相同的行为,

打开控制台,尝试 var foo="bar" ,然后输入 console.log(this.foo) 。你会得到 bar。

关于javascript - 在全局 "for in"对象上使用 "this"循环的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22751720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com