我应该使用以下哪项将location
对象分配给 javascript 中的局部变量?
var l = location;
var l = window.location;
var l = window.document.location;
为什么有这么多方法?有什么区别吗?
我应该使用以下哪项将location
对象分配给 javascript 中的局部变量?
var l = location;
var l = window.location;
var l = window.document.location;
为什么有这么多方法?有什么区别吗?
我会使用window.location
, 来帮助确保我真正谈论的是全局对象的属性,而不是碰巧被调用的某个局部变量location
。
W3C 规范说:
Window 接口的 location 属性必须返回该 Window 对象的 Document 的 Location 对象。
所以这两个确实是等价的(实际上是完全相同的对象)。
location
恰好是 的简写window.location
,只要location
范围内没有其他变量。
它们都指向同一个对象。虽然,window.location
更明确,跨浏览器兼容,并且可以防止与location
在不同范围内命名的其他变量发生冲突。
为什么有这么多方法?
浏览器差异/过去时代的遗迹。
在 Web 浏览器中,window
始终位于变量查找链的顶部。因此,全局变量x
也是window.x
。例如:
<script>
var x = 1;
window.alert(window.x);
</script>
会警觉1
。同样,如果链中不再调用局部变量,location
也将解析。window.location
location
window.location 是 _top 位置。document.location 是当前的 html 页面位置
如果您在 iframe 中,则 iframe 的 document.location 会有所不同,因为 window.location 指的是父页面。
通过对此进行检查,您可以通过检查它们是否相同来打破框架。如果不打破未经授权的框架。或检查我的 i 框架的父页面是否正确,如果不重定向到正确的页面。