web-dev-qa-db-fra.com

Quelle est la différence entre window.location = et window.location.replace ()?

Y a-t-il une différence entre ces deux lignes?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
252
Aaron Digulla

_window.location_ ajoute un élément à votre historique en ce sens que vous pouvez (ou devriez pouvoir) cliquer sur "Précédent" et revenir à la page actuelle.

_window.location.replace_ remplace l'élément d'historique actuel afin que vous ne puissiez pas y revenir.

Voir window.location :

assign(url): charge le document à l'URL fournie.

replace(url): remplace le document actuel par celui de l'URL fournie. La différence avec la méthode assign() est qu'après l'utilisation de replace(), la page en cours ne sera pas enregistrée dans l'historique de session, ce qui signifie que l'utilisateur ne pourra pas utiliser le bouton Précédent pour y accéder.

Oh et en général:

_window.location.href = url;
_

est favorisée par rapport à:

_window.location = url;
_
372
cletus

TLDR;

utilisez location.href ou mieux utilisez window.location.href;

Cependant, si vous lisez ceci, vous obtiendrez une preuve indéniable.

La vérité est que c'est bien, mais pourquoi faire des choses discutables. Vous devriez prendre la route la plus haute et le faire comme il se doit.

location = "#/mypath/otherside"
var sections = location.split('/')

Ce code est parfaitement correct du point de vue de la syntaxe, de la logique, du type, vous savez ce qui ne va pas?

il a location au lieu de location.href

et ça

var mystring = location = "#/some/spa/route"

quelle est la valeur de mystring? est-ce que quelqu'un sait vraiment sans faire un test. Personne ne sait ce qui se passera exactement ici. Bon sang, je viens d'écrire ça et je ne sais même pas ce que ça fait. location est un objet, mais j'attribue une chaîne. Passera-t-il à la chaîne ou à l'objet de localisation? Disons qu'il existe une réponse à la manière dont cela devrait être mis en œuvre. Pouvez-vous garantir que tous les navigateurs feront la même chose?

Je suppose que tous les navigateurs gèrent la même chose.

var mystring = location.href = "#/some/spa/route"

Et si vous placez ceci dans TypeScript, cela cassera parce que le compilateur de type dira que ceci est supposé être un objet?

Cette conversation est cependant beaucoup plus profonde que l’objet location. En quoi consiste cette conversion concernant le type de programmeur que vous souhaitez être?

Si vous prenez ce raccourci, oui, cela pourrait aller aujourd'hui, mais demain, bon Dieu, ça pourrait aller pour toujours, mais monsieur, vous êtes maintenant un mauvais programmeur. Ce ne sera pas acceptable pour vous et vous échouerez.

Il y aura plus d'objets. Il y aura une nouvelle syntaxe.

Vous pouvez définir un getter qui ne prend qu'une chaîne mais renvoie un objet. Le pire, c'est de penser que vous faites quelque chose de correct. Vous pensez peut-être que vous êtes génial pour cette méthode intelligente, car les gens ici vous ont honteusement égaré.

var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"

Avec les getters et les setters, ce code fonctionnerait, mais ce n’est pas parce que cela peut être fait que cela signifie que c’est "WISE".

La plupart des gens qui programment adorent programmer et aiment s’améliorer. Au cours des dernières années, je suis devenue assez bonne et j'ai beaucoup appris. La chose la plus importante que je sais maintenant, en particulier lorsque vous écrivez des bibliothèques, est la cohérence et la prévisibilité.

Faites les choses que vous pouvez toujours faire.

+"2" <- ceci analyse ici la chaîne en un nombre. devriez-vous l'utiliser? ou devriez-vous utiliser parseInt("2")?

qu'en est-il de var num =+"2"?

D'après ce que vous avez appris, dans l'esprit de stackoverflow, je ne suis pas très optimiste.

Si vous commencez à suivre ces 2 mots cohérents et prévisibles. Vous connaîtrez la bonne réponse à une tonne de questions sur stackoverflow.

Laissez-moi vous montrer comment cela porte ses fruits. Normalement, je place ; sur chaque ligne de javascript que j’écris. Je sais que c'est plus expressif. Je sais que c'est plus clair. J'ai suivi mes règles. Un jour, j'ai décidé de ne pas le faire. Pourquoi? Parce que beaucoup de gens me disent que ce n'est plus nécessaire et que JavaScript peut s'en passer. Alors qu'est-ce que j'ai décidé de faire? Maintenant, parce que je suis devenu sûr de moi en tant que programmeur (car vous devriez apprécier le fruit de la maîtrise d'une langue), j'ai écrit quelque chose de très simple et je ne l'ai pas vérifié. J'ai effacé une virgule et je ne pensais pas avoir besoin de refaire un test pour une opération aussi simple que celle consistant à supprimer une virgule.

J'ai écrit quelque chose de similaire à es6 et babel

var a = "hello world"
(async function(){
  //do work
})()

Ce code a échoué et a pris une éternité à comprendre. Pour une raison quelconque, ce qu'il a vu était

var a = "hello world"(async function(){})()

caché au plus profond du code source, il me disait que "bonjour le monde" n’était pas une fonction.

Pour plus de plaisir, noeud ne montre pas les cartes sources du code transpilé.

J'ai perdu tellement de temps stupide. J'étais également en train de montrer à quel point l'ES6 était géniale, puis j'ai dû commencer le débogage et démontrer à quel point l'ES6 était meilleur et sans maux de tête. Ce n'est pas convaincant.

J'espère que cela répond à votre question. Cette question étant ancienne, elle concerne davantage la génération future, des personnes qui apprennent encore.

Question quand les gens disent que ça ne compte pas, peu importe la façon dont fonctionne. Il y a de fortes chances qu'une personne plus expérimentée et plus avisée vous le dira autrement.

et si quelqu'un écrase l'objet de localisation. Ils feront un shim pour les navigateurs plus anciens. Une nouvelle fonctionnalité doit être vérifiée et votre code de 3 ans va échouer.

Ma dernière note à méditer.

Écrire un code propre et clair avec un but précis fait quelque chose pour votre code qui ne peut être corrigé avec raison ou tort. Cela rend votre code un facilitateur.

Vous pouvez utiliser plus de plugins, librairies sans crainte d’interruption entre les codes.

pour l'enregistrement. use

window.location.href

11
Lpc_dark