4

我有这个代码:

<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>

在 Firefox 中,控制台会记录以下内容:

[ "window", "document", "InstallTrigger", "console", "getInterface" ]
[ "window", "document", "InstallTrigger", "console", "getInterface", "location", "$", "jQuery" ]

现场演示:http: //jsfiddle.net/eX8jQ/

Object.keys(this)注意jQuery 执行后如何返回三个附加元素。我明白为什么"$",并且"jQuery"被添加了,但是为什么"location"

我还在 Chrome 和 IE10 中进行了测试。在两者中,只有"$""jQuery"被添加。

4

2 回答 2

0

jQuery 1.9.1 在其内部初始化代码中包含以下内容:

var location = window.location;

在顶级上下文中,thisis window,所以您正在测试Object.keys(window). 显然 Firefox 神奇地处理了该属性——除非被访问,否则它window.location不会显示在其中。keys所以上述赋值的一个副作用是让它出现在那里。

这个局部变量不在 jQuery 1.11.1 或 jQuery 2.1.1 中,所以简单地加载 jQuery 应该不会有这个副作用。

于 2014-05-22T23:18:13.627 回答
-1

在 Firefox 中,Location 默认不在键中,但在 Chrome 和 IE 中,它一开始就在那里。在 Chrome 和 IE10 中对此进行测试:http: //jsfiddle.net/eX8jQ/1/在您的小提琴中,您可以在 chrome 中看到 Location ,即它只是不在数组中的同一位置。

因为我必须包含代码才能发布这个......

<script>
    console.log( Object.keys( this ) );
</script>

我还没有在 IE10 中实际测试过这个,我目前无法访问它。

于 2013-02-07T22:39:44.567 回答