var a; undefined > "a" in window; true > a in window; true 是否存在某种类-6ren">
gpt4 book ai didi

javascript - window 中的 "varName"和 window 中的 varName 都返回 true

转载 作者:行者123 更新时间:2023-11-28 11:35:49 26 4
gpt4 key购买 nike

在 JavaScript 中,为什么以下两者都返回 true?

> var a; 
undefined
> "a" in window;
true
> a in window;
true

是否存在某种类型强制,或者 JavaScript 是否将 a 既存储为字符串又存储为窗口中的变量?

请随意重写这个问题的标题 - 我不确定如何准确地描述这种令人困惑的现象。

最佳答案

不,您声明了一个名为 a 的变量,该变量已初始化为 undefined。该变量是全局变量,因此可以作为全局对象(窗口)的排序属性进行访问,因此:

var a = {};//an obejct
var b = {};//another
b === a //false, two separate objects, of course but
window.a === a;//true

这就是为什么 'a' in window 为 true。它类似于window.hasOwnProperty('a');。类似,不是同一件事。

您所做的第二次检查(a in window)被评估为undefined in window,反过来,值undefined被字符串化,所以表达式最终计算结果为'undefined in window',这始终为 true。
我承认,这很令人困惑,因为 undefined 既是一个值,又是一个属性,这实际上没有意义。这只是 JS 中你必须学会​​忍受的怪癖之一。您可以像这样验证这一点:

window.hasOwnProperty('undefined');//true
window.undefined;//undefined of course
window.hasOwnProperty('null');//false
typeof null;//object (really! But it is actually a primitive
typeof undefined;//undefined

null 是一个出于历史原因的对象,但我不会向您提供“ECMAScript 的完整历史”,只是认为您可能想知道.

你必须记住的是 JS 如何解析变量名和表达式。 I've explained this many times, see this answer and all of the links at the bottom了解此事详情

关于javascript - window 中的 "varName"和 window 中的 varName 都返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475017/

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