Existe uma diferença entre essas duas linhas?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
javascript
window
location
Aaron Digulla
fonte
fonte
href
eassign
: stackoverflow.com/q/2383401/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Respostas:
window.location
adiciona um item ao seu histórico, no qual você pode (ou deve poder) clicar em "Voltar" e voltar à página atual.window.location.replace
substitui o item do histórico atual para que você não possa voltar a ele.Veja
window.location
:Ah, e de um modo geral:
é favorecido sobre:
fonte
window.location.href
seria favorecidowindow.location
?window.location.replace(URL)
URL exatamente igual ao atual, posso esperar que ele seja atualizado / recarregado ou tem a opção de não fazer nada?TLDR;
usar
location.href
ou melhor usarwindow.location.href
;No entanto, se você ler isso, obterá uma prova inegável.
A verdade é que é bom usar, mas por que fazer coisas que são questionáveis. Você deve seguir o caminho mais alto e fazê-lo da maneira que provavelmente deve ser feito.
Esse código está perfeitamente correto em termos de sintaxe, lógica e tipo: você sabe a única coisa errada com ele?
tem em
location
vez delocation.href
que tal isso
qual é o valor de
mystring
? alguém realmente sabe sem fazer algum teste. Ninguém sabe o que exatamente vai acontecer aqui. Inferno, acabei de escrever isso e nem sei o que faz.location
é um objeto, mas estou atribuindo uma sequência de caracteres que passará a string ou passará o objeto de localização. Vamos dizer que há alguma resposta sobre como isso deve ser implementado. Você pode garantir que todos os navegadores farão a mesma coisa?Isso eu posso adivinhar que todos os navegadores irão lidar com o mesmo.
E se você colocar isso no texto datilografado, ele será quebrado porque o compilador de tipos dirá que isso é suposto ser um objeto?
Essa conversa é muito mais profunda do que apenas o
location
objeto. Qual é a conversão de que tipo de programador você deseja ser?Se você pegar esse atalho, sim, pode estar tudo bem hoje, você pode estar bem amanhã, inferno, pode ficar bem para sempre, mas agora você é um péssimo programador. Não vai ser bom para você e vai falhar.
Haverá mais objetos. Haverá nova sintaxe.
Você pode definir um getter que pega apenas uma string, mas retorna um objeto, e a pior parte é que você acha que está fazendo algo correto, pode ser brilhante para esse método inteligente, porque as pessoas aqui o envergonharam.
Com getters e setters, esse código realmente funcionaria, mas apenas porque isso pode ser feito não significa que é 'WISE' fazer isso.
A maioria das pessoas que está programando gosta de programar e gosta de melhorar. Nos últimos anos, fiquei muito bom e aprendi muito. A coisa mais importante que eu sei agora, especialmente quando você escreve Bibliotecas, é consistência e previsibilidade.
Faça as coisas que você pode fazer consistentemente.
+"2"
<- aqui analisa a string para um número. você deveria usá-lo? ou você deve usarparseInt("2")
?que tal
var num =+"2"
?Pelo que você aprendeu, das mentes do stackoverflow não tenho muita esperança.
Se você começar a seguir estas 2 palavras consistentes e previsíveis. Você saberá a resposta certa para várias perguntas sobre o stackoverflow.
Deixe-me mostrar como isso compensa. Normalmente eu coloco
;
em todas as linhas de javascript que escrevo. Eu sei que é mais expressivo. Eu sei que é mais claro. Eu segui minhas regras. Um dia eu decidi não. Por quê? Porque tantas pessoas estão me dizendo que não é mais necessário e o JavaScript pode ficar sem ele. Então, o que eu decidi fazer isso. Agora, porque eu me tornei um programador (como você deve apreciar o fruto de dominar uma linguagem), escrevi algo muito simples e não o verifiquei. Apaguei uma vírgula e não achei que fosse necessário testar novamente uma coisa tão simples como remover uma vírgula.Eu escrevi algo semelhante a isso em es6 e babel
Esse código falhou e levou uma eternidade para descobrir. Por alguma razão, o que viu foi
escondido dentro do código fonte, ele estava me dizendo "olá mundo" não é uma função.
Para um nó mais divertido, não mostra os mapas de origem do código transpilado.
Perdi tanto tempo estúpido. Eu também estava apresentando a alguém sobre como o ES6 é brilhante e tive que começar a depurar e demonstrar como o ES6 é melhor e sem dor de cabeça. Não é convincente.
Eu espero que isto responda sua pergunta. Sendo uma pergunta antiga, é mais para a geração futura, pessoas que ainda estão aprendendo.
Pergunta quando as pessoas dizem que não importa de qualquer maneira. As chances são de que uma pessoa mais experiente e mais sábia lhe dirá de outra maneira.
e se alguém substituir o objeto de localização. Eles farão um calço para navegadores mais antigos. Ele receberá um novo recurso que precisa ser modificado e seu código de 3 anos falhará.
Minha última nota para refletir.
Escrever um código de propósito limpo e claro faz algo pelo seu código que não pode ser respondido com certo ou errado. O que ele faz é tornar seu código um facilitador.
Você pode usar mais plugins, bibliotecas, sem medo de interrupção entre os códigos.
para o registro. usar
window.location.href
fonte
window.location.href
longowindow.location
, você esqueceu a questão estava realmente pedindo a diferença entre estes ewindow.location.replace()
TLDR; use location.href or better use window.location.href;
O TLDR é essa linha. O resto é a "resposta".mystring = location.href = "#/some/spa/route"
. Além disso, muitos idiomas permitiriam a conversão de tipos (implícitos) de alguma maneira. No final do dia, o javascript é uma linguagem de tipo dinâmico, coloca conceitos de digitação e diz que não é bom, não faz sentido.console
ou sombreiawindow
- Agora você tem um problema maior .