Javascript 为什么";地点“;在我将jQuery包含到页面后,属性是否会在Object.keys()中结束?
我有以下代码:Javascript 为什么";地点“;在我将jQuery包含到页面后,属性是否会在Object.keys()中结束?,javascript,jquery,html,Javascript,Jquery,Html,我有以下代码: <script> console.log( Object.keys( this ) ); </script> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script> console.log( Object.keys( this ) ); </script> 现场演示: 注意执行jQuery后,
<script>
console.log( Object.keys( this ) );
</script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
console.log( Object.keys( this ) );
</script>
现场演示:
注意执行jQuery后,Object.keys(this)
如何返回另外三个元素。我理解为什么要添加“$”
,以及“jQuery”
,但为什么要添加“location”
我还测试了Chrome和IE10。在这两个版本中,都只添加了
“$”
,以及“jQuery”
。在firefox中,默认情况下,位置不在键中,但在Chrome和IE中,位置就在那里。在Chrome和IE10中测试这一点:在你的小提琴中,你可以看到Chrome和ie中的位置,它只是不在阵列中的同一位置
因为我必须包含代码来发布这个
<script>
console.log( Object.keys( this ) );
</script>
log(Object.keys(this));
实际上,我还没有在IE10中对此进行测试,我目前没有访问权限。jQuery 1.9.1的内部初始化代码中包含以下内容:
var location = window.location;
在顶级上下文中,这个
是窗口
,因此您正在测试对象.键(窗口)
。显然,Firefox神奇地处理了window.location
属性——除非被访问,否则它不会显示在键中。因此,上述任务的一个副作用是使它出现在那里
这个局部变量不在jQuery 1.11.1或jQuery 2.1.1中,因此简单地加载jQuery应该不会有这种副作用。在chrome和IE10中,位置已经是其中的一部分。还是我遗漏了什么?对我的问题是,jQuery做了什么使它出现在Firefox中?请注意,Firefox中确实存在location
全局属性,只是它没有出现在Object.keys()
中。但是,一旦jQuery执行,它就会出现。检查一下:似乎仅仅通过访问就可以在Object.keys()
中显示location
属性。这与此有什么关系?当您显式创建一个新的全局属性时(通过全局代码中的var foo
,或通过分配到window.foo
),该属性将显示在对象.keys()中。但是location
是一个内置的全局属性,它只有在被访问后才会显示。@ŠimeVidas所以我想你真正的问题是,为什么location不显示在Object.keys中,而这是firefox的开始。如果您查看jQuery核心,您可以看到访问位置的位置,这使它正确地显示出来(除了添加了两个全局变量jQuery
和$
)。我建议缩小这个问题的范围,不包括jQuery,而是关注真正的问题。
var location = window.location;