Quando você definiria location
uma string de URL versus a configuração location.href
?
location = "http://www.stackoverflow.com";
vs
location.href = "http://www.stackoverflow.com";
javascript
quimérico
fonte
fonte
location.href
de correio falhar por causa de mesma origem em políticas: javascript.info/tutorial/...replace
eassign
: stackoverflow.com/q/1865837/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Respostas:
Você pode definir
location
diretamente porque é um pouco mais curto. Se você está tentando ser conciso, geralmentewindow.
também pode omitir o .As atribuições de URL para ambos
location.href
elocation
são definidas para funcionar no JavaScript 1.0, no Netscape 2, e foram implementadas em todos os navegadores desde então. Então faça a sua escolha e use o que achar mais claro.fonte
Mesmo se ambos funcionassem, eu usaria o último.
location
é um objeto, e atribuir uma string a um objeto não é um bom presságio para legibilidade ou manutenção.fonte
window.location
: ele não requerSAME ORIGIN
.location = 'http://www.example.com'
parece super legível. Embora, como um caso especial. Isso é compatível com versões anteriores e permanecerá compatível no futuro próximo.Como já foi dito,
.location
é um objetoMas essa pessoa sugeriu o uso de qualquer um.Mas, você fará melhor para usar a.href
versão.Os objetos têm propriedades padrão que, se nada mais for especificado, eles serão assumidos. No caso dolocation
objeto, ele tem uma propriedade chamada.href
. E, ao não especificar QUALQUER propriedade durante a atribuição, ele assumirá "href" por padrão.Tudo está bem até que uma versão posterior do modelo de objeto seja alterada e não haja mais uma propriedade padrão ou a propriedade padrão seja alterada. Em seguida, seu programa é interrompido inesperadamente.
Se você quer dizerhref
, você deve especificarhref
.fonte
location
funciona porque a propriedade foi definida para ter esse comportamento de atribuição especial no JavaScript 1.0 e em todos os navegadores desde então. Agora o HTML5 exige. Portanto, embora possa ser mais bonito ou mais consistente atribuir a.href
, não há vantagem de compatibilidade com versões anteriores ou anteriores.window.location = url
é mais bonitolocation = url
é mais bonitoAlguns anos atrás,
location
não funcionou para mim no IE elocation.href
funcionou (e ambos funcionaram em outros navegadores). Desde então, sempre useilocation.href
e nunca mais tive problemas. Não me lembro qual versão do IE era.fonte
strict mode
cromo irá lançar uma exceção se você tentar atribuir diretamente paralocation
também, então eu sempre usolocation.href
Só para esclarecer, você não pode fazer
location.split('#')
,location
é um objeto, não uma string. Mas você pode fazerlocation.href.split('#');
porquelocation.href
é uma string.fonte
Uma diferença a ter em mente, no entanto.
Digamos que você queira criar um URL usando o URL atual. O código a seguir o redirecionará, porque não está chamando,
String.replace
masLocation.replace
:Os seguintes códigos funcionam:
fonte
Com o TypeScript, use
window.location.href
comowindow.location
é tecnicamente um objeto que contém:A configuração
window.location
produzirá um erro de tipo, enquantowindow.location.href
é do tipo string.Fonte
fonte