Есть ли разница в использовании только местоположения по сравнению с использованием window.location в разных браузерах?

Я ловлю себя на том, что всегда пишу:

console.log(window.location.href);

даже не задумываясь об этом. Большинство ответов на SO также пишут так. Есть ли причина, по которой я не могу просто написать:

location.href

так как location является объектом на уровне окна? Есть ли проблемы с кросс-браузерной совместимостью?

Для уточнения: я знаю, что есть document.location, но это НЕ то, о чем этот вопрос. Речь идет о том, есть ли какая-либо разница между использованием только location и использованием window.location в разных браузерах.


person CodingIntrigue    schedule 17.10.2013    source источник
comment
Вы хоть читаете? Это не дубликат location против location.href, а о x против window.x   -  person Tibos    schedule 17.10.2013
comment
@NikhilAgrawal Нет. Вам нужно еще раз прочитать вопрос. Или комментарий выше вашего. Оба объяснят, почему речь идет явно не об объекте и свойстве, а о области действия конкретного объекта.   -  person CodingIntrigue    schedule 09.01.2014
comment
Люди становятся слишком счастливыми. Этот вопрос даже близко не связан с вопросом, который предположительно является дубликатом.   -  person Tmdean    schedule 02.03.2014
comment
@Tmdean: это все равно дубликат, например, первый вопрос в связанном списке. stackoverflow.com/questions/4709037/< /а>   -  person Qantas 94 Heavy    schedule 02.03.2014
comment
@ Qantas94Heavy Вопрос, на который вы ссылаетесь, не является первым связанным вопросом в связанном списке. Ни один из тех, кто находится в соответствующем списке, не имеет ничего общего с моим вопросом. Ваш полностью действителен, но я долго искал и ничего не нашел   -  person CodingIntrigue    schedule 02.03.2014
comment
@RGraham: это странно, это то, что я вижу. В любом случае, вы правы - дубликаты неверны.   -  person Qantas 94 Heavy    schedule 02.03.2014


Ответы (1)


Есть некоторые отличия.

В глобальном масштабе между ними нет абсолютно никакой разницы, но в других случаях могут возникнуть проблемы:

function () {
  var location = { 'href' : '123' } ;
  console.log(window.location.href) // actual url
  console.log(location.href) // '123'
}

Это происходит из-за того, что если вы пишете location без префикса window, он будет проходить через каждую область, чтобы найти переменную с именем location. В конце концов он найдет его в окне, если его не объявила и другая область. Очевидно, верно и обратное:

function () {
  var window = { 'location' : { 'href': '123' } };  
  console.log(window.location.href) // '123'
  console.log(location.href) // actual url
}

Я, например, предпочитаю префикс окна перед глобальными переменными, потому что таким образом я сразу знаю, что они глобальны, а также потому, что, когда я нахожу глобальную переменную, которая не имеет префикса окна, я знаю, что это опечатка, в которой отсутствует переменная, но это чисто личное предпочтение.

person Tibos    schedule 17.10.2013
comment
Ну, окно — это просто пространство имен, вам просто нужно использовать его последовательно и осторожно. Часто люди используют document.getElementById, но кто-то также может использовать var document = 'Hello!', у которого нет этой функции. Однако окно — это своего рода ключевое слово, которое вы не можете переопределить. Таким образом, используя window.document.getElementById, вы гарантированно получите собственный код javascript. Вы можете добавить к этому в своей локальной области префикс var win=window,doc=win.document;. Особенно при использовании стороннего кода, и вы заботитесь о безопасности, тогда это правильный путь (не знаю, распространено ли это). - person Yeti; 13.05.2016