Должны ли они оба ссылаться на один и тот же объект?
Должны ли они оба ссылаться на один и тот же объект?
Ответы:
По словам 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 trueif х и у относятся к одному и тому же объекту. В противном случае вернитесь 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