Должны ли они оба ссылаться на один и тот же объект?
Должны ли они оба ссылаться на один и тот же объект?
Ответы:
По словам 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
. Предостережения - fe if(an_undefined_variable)
выдаст ошибку, если переменная не была определена - if(window.an_undefined_variable)
не будет.
window.location доступен для чтения / записи во всех совместимых браузерах.
document.location доступен только для чтения в Internet Explorer (по крайней мере), но доступен для чтения / записи в браузерах на основе Gecko (Firefox, SeaMonkey).
console.log(location);
? !!
document.location
Первоначально это было свойство только для чтения, хотя браузеры Gecko также позволяют назначать его. Для кросс-браузерной безопасности используйтеwindow.location
вместо этого.
Читать далее:
Интересно, что если у вас есть фрейм, изображение или форма с именем «location», то «document.location» предоставляет ссылку на окно фрейма, изображение или форму соответственно вместо объекта Location. По-видимому, это связано с тем, что поиск имени коллекции document.forms, document.images и window.frames получает приоритет над отображением в window.location.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
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, которая идентично читает Return true
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 === document.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
.
Поэтому нет необходимости сравнивать конструктор или любое другое свойство.
Ну да, они одинаковые, но ....!
window.location
не работает в некоторых браузерах Internet Explorer.
Несмотря на то, что большинство людей рекомендуют здесь, вот как динамический протокол Google Analytics выглядел целую вечность (до того, как они недавно перешли из ga.js в analytics.js):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Дополнительная информация: https://developers.google.com/analytics/devguides/collection/gajs/
В новой версии они использовали «//», поэтому браузер может автоматически добавлять протокол:
'//www.google-analytics.com/analytics.js'
Так что, если Google предпочитает document.location чтобы , window.location
когда они нуждаются в протоколе в JS, я предполагаю , что у них есть какие - то причины для этого.
ОБЩИЕ СВЕДЕНИЯ : Я лично считаю, что это одно document.location
и window.location
то же, но если гигант с самой большой статистикой об использовании браузеров, таких как Google, использует document.location , я рекомендую следовать им.
На самом деле я замечаю разницу в chrome между обоими. Например, если вы хотите выполнить переход к изолированному фрейму из дочернего фрейма, вы можете сделать это только с document.location, но не с window.location