Должны ли они оба ссылаться на один и тот же объект?
javascript
window.location
Морган Ченг
источник
источник
Ответы:
По словам W3C, они одинаковы. На самом деле, для кросс-браузерной безопасности, вы должны использовать,
window.location
а неdocument.location
.Смотрите: http://www.w3.org/TR/html/browsers.html#dom-location
источник
window.location
) без объяснения причин. Если вы не предоставите обоснование, почему кто-то должен принять ваш совет? Ответ Кристофа гораздо более полезен в этом отношении.Канонический способ получить объект текущего местоположения
window.location
(см. Эту страницу MSDN от 1996 года и черновик W3C от 2006 года). ).Сравните это с тем
document.location
, что первоначально вернул текущий URL только в виде строки (см. Эту страницу в MSDN ). Вероятно, чтобы избежать путаницы,document.location
был заменен наdocument.URL
(см. Здесь, на MSDN ), который также является частью DOM Level 1 .Насколько я знаю, все современные браузеры
document.location
соответствуютwindow.location
, но я все еще предпочитаю, такwindow.location
как это то, что я использовал, так как я написал свой первый DHTML.источник
window.location
, разве это не одинаково справедливо, чтобы просто использоватьlocation
?window
объектом. Таким образом, любая переменная или функция, которую вы определяете на верхнем уровне вашего скрипта, является свойством объектаwindow
, на который ссылается , который является глобальным объектом. Глобальный объект подразумевается, когда отсутствует какwindow.
- таким образомlocation
интерпретируется какwindow.location
. Предостережения - feif(an_undefined_variable)
выдаст ошибку, если переменная не была определена -if(window.an_undefined_variable)
не будет.window.location доступен для чтения / записи во всех совместимых браузерах.
document.location доступен только для чтения в Internet Explorer (по крайней мере), но доступен для чтения / записи в браузерах на основе Gecko (Firefox, SeaMonkey).
источник
document.location
только для чтения в IE. Я могу успешно назначить его в IE 10, 9, 8 и 6 (используя виртуальные машины из modern.ie ).console.log(location);
? !!document.location
Первоначально это было свойство только для чтения, хотя браузеры Gecko также позволяют назначать его. Для кросс-браузерной безопасности используйтеwindow.location
вместо этого.Читать далее:
document.location
window.location
источник
Интересно, что если у вас есть фрейм, изображение или форма с именем «location», то «document.location» предоставляет ссылку на окно фрейма, изображение или форму соответственно вместо объекта Location. По-видимому, это связано с тем, что поиск имени коллекции document.forms, document.images и window.frames получает приоритет над отображением в window.location.
источник
window.location
иdocument.location
не может быть скрыт в Chrome или Firefox.Насколько я знаю, оба одинаковы. Для кросс-браузерной безопасности вы можете использовать
window.location
вместоdocument.location
.Все современные браузеры
document.location
соответствуютwindow.location
, но я все еще предпочитаюwindow.location
поскольку это то, что я использовал, так как я написал свою первую веб-страницу. это более последовательно.Вы также можете увидеть
document.location === window.location
результатыtrue
, которые поясняют, что оба одинаковы.источник
document.location === window.location
возвращаетсяtrue
также
document.location.constructor === window.location.constructor
являетсяtrue
Примечание: только что протестировано на Firefox 3.6, Opera 10 и IE6
источник
===
и==
эквивалентны."abc" == new String("abc")
возвращается,true
а"abc" === new String("abc")
возвращаетсяfalse
.==
и===
они эквивалентны. См. Разделы спецификаций 11.9.3 и 11.9.6. Для ненулевых, неопределенных, ненулевых, ненулевых,==
нестроковых значений с одним и тем же типом поведение регулируется 11.9.3 часть 1f, а===
поведение - 11.9.6 часть 7, которая идентично читает Returntrue
if х и у относятся к одному и тому же объекту. В противном случае вернитесьfalse
.document.location
иwindow.location
указывают на объекты. Вы упускаете всю точку тройных равных; использование 2-х равных не доказывает, что они являются одним и тем же объектом. Мы должны использовать 3 равных, а не 2 равных, потому что 2 равных дают нам ложный положительный результат. В браузере, в котором document.location представляет собой строку URL, равнуюwindow.location.toString()
, Тогдаdocument.location==window.location
вернет true, аdocument.location===window.location
вернет false.document.location === window.location
сравнения..constructor
Я думаю, что тот факт, что это сравнение тоже означает, означает, что этот ответ по-прежнему обоснован, но его использование===
упростит рассуждения.Да, они одинаковы. Это одна из многих исторических причуд в браузере JS API. Попробуйте сделать:
источник
window.location является более надежной последовательностью, учитывая старые браузеры.
источник
Редко можно увидеть разницу в наше время, потому что HTML 5 больше не поддерживает наборы фреймов. Но в то время, когда у нас есть frameset, document.location перенаправляет только фрейм, в котором выполняется код, а window.location перенаправляет всю страницу.
источник
Я бы сказал,
window.location
это более надежный способ получения текущего URL . Ниже приводится разница междуwindow.location
иdocument.url
что появилось в одном из сценариев, когда я добавлял параметры хеша в URL и читал его позже.После добавления хеш-параметров в URL.
В более старом браузере я не мог получить параметры хеша из URL с помощью
document.url
, но когда я использовалwindow.location
я смог получить параметры хеша из URL.Так что всегда лучше использовать
window.location
.источник
document.URL
- речь шла оwindow.location
иdocument.location
. Кроме того,document.url
не существует = это должно быть в верхнем регистре.document.location.constructor === window.location.constructor
являетсяtrue
.Это потому, что это точно такой же объект, как вы можете видеть из
document.location===window.location
.Поэтому нет необходимости сравнивать конструктор или любое другое свойство.
источник
По крайней мере, в IE, он имеет небольшую разницу в локальном файле:
document.URL вернет "file: // C: \ projects \ abc \ a.html"
но window.location.href вернет "file: /// C: /projects/abc/a.html"
Один слеш, другой слеш
источник
Ну да, они одинаковые, но ....!
window.location
не работает в некоторых браузерах Internet Explorer.источник
Несмотря на то, что большинство людей рекомендуют здесь, вот как динамический протокол Google Analytics выглядел целую вечность (до того, как они недавно перешли из ga.js в analytics.js):
Дополнительная информация: https://developers.google.com/analytics/devguides/collection/gajs/
В новой версии они использовали «//», поэтому браузер может автоматически добавлять протокол:
Так что, если Google предпочитает document.location чтобы ,
window.location
когда они нуждаются в протоколе в JS, я предполагаю , что у них есть какие - то причины для этого.ОБЩИЕ СВЕДЕНИЯ : Я лично считаю, что это одно
document.location
иwindow.location
то же, но если гигант с самой большой статистикой об использовании браузеров, таких как Google, использует document.location , я рекомендую следовать им.источник
На самом деле я замечаю разницу в chrome между обоими. Например, если вы хотите выполнить переход к изолированному фрейму из дочернего фрейма, вы можете сделать это только с document.location, но не с window.location
источник