Y a-t-il une différence entre ces deux lignes?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
javascript
window
location
Aaron Digulla
la source
la source
href
etassign
: stackoverflow.com/q/2383401/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Réponses:
window.location
ajoute un élément à votre historique en ce que vous pouvez (ou devriez pouvoir) cliquer sur "Retour" 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
:Oh et d'une manière générale:
est préféré à:
la source
window.location.href
il préféréwindow.location
?window.location.replace(URL)
où l'URL est exactement la même que l'URL actuelle, puis-je m'attendre à ce qu'elle soit actualisée / rechargée ou a-t-elle la possibilité de ne rien faire?TLDR;
utiliser
location.href
ou mieux utiliserwindow.location.href
;Cependant, si vous lisez ceci, vous obtiendrez une preuve indéniable.
La vérité est que c'est bien à utiliser, mais pourquoi faire des choses qui sont discutables. Vous devriez prendre la route la plus élevée et faire comme vous le feriez probablement.
Ce code est parfaitement correct au niveau de la syntaxe, de la logique, du type, vous savez la seule chose qui ne va pas?
il a
location
au lieu delocation.href
Et ça
quelle est la valeur de
mystring
? est-ce que quelqu'un sait vraiment sans faire de test. Personne ne sait ce qui se passera exactement ici. Enfer je viens d'écrire ceci et je ne sais même pas ce que ça fait.location
est un objet mais j'attribue une chaîne s'il passera la chaîne ou passera l'objet de localisation. Disons qu'il y a une réponse à la façon dont cela devrait être mis en œuvre. Pouvez-vous garantir que tous les navigateurs feront la même chose?Je peux à peu près deviner que tous les navigateurs géreront la même chose.
Que se passe-t-il si vous placez cela en tapuscrit, cela se cassera-t-il parce que le compilateur de type dira que c'est supposé être un objet?
Cette conversation est cependant beaucoup plus profonde que le simple
location
objet. Quelle est cette conversion sur le type de programmeur que vous voulez être?Si vous prenez ce raccourci, oui ça pourrait aller bien aujourd'hui, ça pourrait aller bien demain, bon sang ça pourrait aller bien pour toujours, mais vous, monsieur, vous êtes maintenant un mauvais programmeur. Ce ne sera pas bien pour vous et cela vous fera défaut.
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 et le pire est que vous penserez que vous faites quelque chose de correct, vous pourriez penser que vous êtes brillant pour cette méthode intelligente parce que les gens ici vous ont honteusement induit en erreur.
Avec les getters et les setters, ce code fonctionnerait réellement, mais ce n'est pas parce qu'il peut être fait que c'est `` WISE '' de le faire.
La plupart des gens qui programment adorent programmer et aiment s'améliorer. Au cours des dernières années, je suis devenu assez bon et j'ai beaucoup appris. La chose la plus importante que je connaisse maintenant, surtout lorsque vous écrivez des bibliothèques, c'est la cohérence et la prévisibilité.
Faites les choses que vous pouvez faire régulièrement.
+"2"
<- ceci analyse ici la chaîne en un nombre. devez-vous l'utiliser? ou devez-vous utiliserparseInt("2")
?qu'en est-il
var num =+"2"
?D'après ce que vous avez appris, dans l'esprit de stackoverflow, je ne suis pas trop, espérons-le.
Si vous commencez à suivre ces 2 mots cohérents et prévisibles. Vous saurez la bonne réponse à une tonne de questions sur stackoverflow.
Permettez-moi de 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 j'ai décidé de faire ça. Maintenant, parce que je suis devenu sûr de moi-même en tant que programmeur (comme 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 chose aussi simple que de supprimer une virgule.J'ai écrit quelque chose de similaire à ceci dans es6 et babel
Ce code a échoué et a pris une éternité à comprendre. Pour une raison quelconque, il a vu
caché au fond du code source, il me disait "bonjour le monde" n'est pas une fonction.
Pour plus de plaisir, le nœud n'affiche pas les cartes sources du code transpilé.
J'ai perdu tellement de temps stupide. Je présentais également à quelqu'un comment ES6 est génial, puis j'ai dû commencer à déboguer et démontrer à quel point ES6 était sans maux de tête et meilleur. Ce n'est pas convaincant.
J'espère que cela répond à votre question. Ceci étant une vieille question, c'est plus pour la génération future, les gens qui apprennent encore.
Question lorsque les gens disent que cela n'a pas d'importance dans les deux cas. Il y a de fortes chances qu'une personne plus sage et plus expérimentée vous en dise autrement.
que faire si quelqu'un écrase l'objet de localisation. Ils feront une cale pour les navigateurs plus anciens. Il obtiendra une nouvelle fonctionnalité qui doit être ajustée et votre code de 3 ans échouera.
Ma dernière note à méditer.
Écrire un code clair et clair a un effet sur votre code auquel il est impossible de répondre par le bien ou le mal. Ce qu'il fait, c'est que votre code est un catalyseur.
Vous pouvez utiliser plus de plugins de choses, des bibliothèques sans crainte d'interruption entre les codes.
pour mémoire. utilisation
window.location.href
la source
window.location.href
pluswindow.location
, vous avez oublié que la question demandait en fait la différence entre ceux-ci etwindow.location.replace()
TLDR; use location.href or better use window.location.href;
Le TLDR est cette ligne. Le reste est la "réponse".mystring = location.href = "#/some/spa/route"
. En outre, de nombreux langages autoriseraient la conversion de type (implicite) d'une manière ou d'une autre. À la fin de la journée, le javascript est un langage typé dynamique, mettez des concepts de type dessus et dites que ce n'est pas bon ne sert à rien.console
ou ombrewindow
- Maintenant, vous avez un plus gros problème.