Има ли някаква разлика при използването само на местоположение спрямо използването на 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'
}

Това произтича от факта, че ако напишете местоположение, без да го префиксирате с прозорец, то ще премине през всеки обхват, за да намери променлива с име местоположение. В крайна сметка ще го намери в прозореца, освен ако друг обхват също не е декларирал такъв. Очевидно е вярно и обратното:

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

Аз например предпочитам да префиксирам глобалните променливи с window, защото по този начин веднага знам, че са глобални, а също и защото, когато намеря глобална променлива, която не е с префикс window, знам, че е печатна грешка, че липсва променлива, но това е чисто лично предпочитание.

person Tibos    schedule 17.10.2013
comment
Е, прозорецът е просто пространство от имена, просто трябва да го използвате последователно и внимателно. Често хората използват document.getElementById, но някой може да направи и var document = 'Hello!', което няма тази функция. Прозорецът обаче е нещо като ключова дума, която не можете да отмените. Така че, като използвате window.document.getElementById, трябва да сте сигурни, че ще получите собствения код на javascript. Можете да поставите пред това във вашия локален обхват с var win=window,doc=win.document;. Особено когато използвате код на трета страна и ви е грижа за безопасността, тогава това е начинът да отидете imo (не знам дали това е често срещано). - person Yeti; 13.05.2016