JavaScript - 当我声明名为'location'的var时,它会被发送到URL吗?

时间:2018-01-05 02:27:56

标签: javascript

我刚刚遇到过最奇怪的事情。

当我声明一个名为'location'的变量时,无论变量的值是什么,都会发送到URL。

var location = 1;
// Results in http://localhost:8000/1

var location = document.getElementById('element');
// Results in http://localhost:8000/[object%20HTMLSelectElement]

这仅适用于location。如果我使用,请说locations

var location2 = 1;
// Nothing weird happens

我正在使用Django。我检查了我的前端和后端代码,似乎没有任何冲突的名称。

导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

location是一个窗口属性。在为location分配任何内容时,它会尝试重定向到该位置。

您可以重命名变量,使其不与任何具有特殊含义的窗口属性冲突。

或者使用IIFE(立即调用函数表达式)使其成为函数内的局部变量:

(function() {
  var location = '';
})();

答案 1 :(得分:0)

locationwindowdocument个对象的内置属性。但是,它可以在不放window.location的情况下访问,这就是为什么你注意到它已经具有特殊含义的原因。它存储URL。如果你改变它,它会改变URL;或者,如果您更改或阅读其中一个属性(例如,执行location.hash="part-7"),您可以更改或阅读部分网址或与其相关的内容。

例如:

console.log(location)

JavaScript中存在某些已经存在的变量。另一个例子是document;或window;等

您可以在此处详细了解locationhttps://developer.mozilla.org/en-US/docs/Web/API/Location