在JavaScript中,为什么以下两个都返回true?
> var a;
undefined
> "a" in window;
true
> a in window;
true
Run Code Online (Sandbox Code Playgroud)
是否存在某种类型强制,或者JavaScript是否存储a为字符串和窗口中的变量?
请随意重写这个问题的标题 - 我不确定如何描述这种令人困惑的现象.
不,你声明了一个名为的变量a,它被初始化为undefined.此变量是全局变量,因此可以作为全局对象(窗口)的排序属性进行访问,因此:
var a = {};//an obejct
var b = {};//another
b === a //false, two separate objects, of course but
window.a === a;//true
Run Code Online (Sandbox Code Playgroud)
这就是为什么'a' in window是真的.它类似于window.hasOwnProperty('a');.类似,不一样的东西.
你做的第二次检查(a in window)被计算undefined in window,反过来值undefined被字符串化,所以表达式最终被评估为'undefined in window',总是如此.
我承认,这是令人困惑的,因为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
Run Code Online (Sandbox Code Playgroud)
null是一个历史原因的对象,但我不打算给你"ECMAScript的完整历史",只是想你可能想知道这一点.
你需要记住的是JS如何解析变量名和表达式.我已经解释了很多次,请看这个答案和底部的所有链接,了解有关此事的详细信息
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |