Есть ли разница между этими двумя строками?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
javascript
window
location
Аарон Дигулла
источник
источник
href
иassign
: stackoverflow.com/q/2383401/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Ответы:
window.location
добавляет элемент в вашу историю, так что вы можете (или должны иметь возможность) нажать «Назад» и вернуться на текущую страницу.window.location.replace
заменяет текущий элемент истории, поэтому вы не можете вернуться к нему.Смотрите
window.location
:Ну и вообще говоря
является предпочтительным по сравнению с:
источник
window.location.href
предпочтение большеwindow.location
?window.location.replace(URL)
URL-адрес, который совпадает с текущим, могу ли я ожидать, что он обновится / перезагрузится, или у него есть возможность ничего не делать?TLDR;
использовать
location.href
или лучше использоватьwindow.location.href
;Однако, если вы прочитаете это, вы получите неопровержимые доказательства.
Правда в том, что это нормально, но зачем делать сомнительные вещи. Вы должны идти по более высокой дороге и делать это так, как это, вероятно, следует делать.
Этот код совершенно правильный по синтаксису, по логике, по типу. Вы знаете, единственное, что с ним не так?
он имеет
location
вместоlocation.href
как насчет этого
какова стоимость
mystring
? Кто-нибудь на самом деле знает, не пройдя тест? Никто не знает, что именно здесь произойдет. Черт, я только что написал это, и я даже не знаю, что он делает.location
является объектом, но я назначаю строку, передаст ли она строку или передаст объект местоположения. Допустим, есть какой-то ответ на то, как это должно быть реализовано. Можете ли вы гарантировать, что все браузеры будут делать то же самое?Это я могу предположить, что все браузеры будут работать одинаково.
Что если вы поместите это в машинописный текст, он сломается, потому что компилятор типов скажет, что это объект?
Однако этот разговор намного глубже, чем просто
location
предмет. Что это за конверсия о том, каким программистом ты хочешь быть?Если вы возьмете этот кратчайший путь, да, это может быть хорошо сегодня, вы можете быть хорошо завтра, черт возьми, это может быть хорошо навсегда, но вы, сэр, сейчас плохой программист. Это не будет хорошо для вас, и это подведет вас.
Там будет больше объектов. Там будет новый синтаксис.
Вы можете определить метод получения, который принимает только строку, но возвращает объект, и хуже всего то, что вы будете думать, что делаете что-то правильно, вы можете подумать, что вы великолепны в этом умном методе, потому что люди здесь постыдно сбили вас с пути.
С геттерами и сеттерами этот код действительно будет работать, но просто потому, что это можно сделать, не означает, что это «Мудрый».
Большинство людей, которые программируют, любят программировать и любят становиться лучше. За последние несколько лет я достаточно хорошо научился и многому научился. Самая важная вещь, которую я знаю сейчас, особенно когда вы пишете Библиотеки, это последовательность и предсказуемость.
Делайте то, что вы можете делать последовательно.
+"2"
<- это прямо здесь разбирает строку на число. Вы должны использовать это? или вы должны использоватьparseInt("2")
?о чем
var num =+"2"
?Из того, что вы узнали, из умений stackoverflow я не слишком надеюсь.
Если вы начнете следовать этим 2 словам последовательным и предсказуемым. Вы будете знать правильный ответ на тонну вопросов по stackoverflow.
Позвольте мне показать вам, как это окупается. Обычно я помещаю
;
в каждую строку написанного мной javascript. Я знаю, что это более выразительно. Я знаю, это более понятно. Я следовал своим правилам. Однажды я решил не делать этого. Зачем? Потому что многие люди говорят мне, что это больше не нужно, и JavaScript может обойтись без этого. Итак, что я решил сделать это. Теперь, когда я стал уверен в себе как программист (как вы должны наслаждаться плодами овладения языком), я написал что-то очень простое и не проверял. Я удалил одну запятую, и я не думал, что мне нужно повторно проверять такую простую вещь, как удаление одной запятой.Я написал нечто похожее на это в es6 и babel
Этот код потерпел неудачу и потребовалось навсегда, чтобы выяснить. По какой-то причине он увидел
скрытый глубоко в исходном коде, он говорил мне, что «привет мир» не является функцией.
Для большего удовольствия узел не показывает исходные карты переданного кода.
Потрачено впустую столько глупого времени. Я также рассказывал кому-то о том, насколько хорош ES6, а затем мне пришлось начать отладку и продемонстрировать, насколько свободна головная боль и лучше ES6. Это не убедительно.
Я надеюсь, что это ответило на ваш вопрос. Это старый вопрос, это больше для будущего поколения, людей, которые все еще учатся.
Вопрос, когда люди говорят, что это не имеет значения, так или иначе работает. Скорее всего, мудрее, более опытный человек скажет вам другое.
Что делать, если кто-то перезаписывает местоположение объекта. Они сделают прокладку для старых браузеров. Он получит некоторую новую функцию, которая должна быть изменена, и ваш 3-летний код потерпит неудачу.
Мое последнее замечание для размышления.
Написание чистого, ясного целенаправленного кода делает что-то для вашего кода, и на него нельзя ответить правильным или неправильным. Он делает ваш код активатором.
Вы можете использовать больше вещей, плагинов, библиотек без страха прерывания между кодами.
Для записи. использование
window.location.href
источник
window.location.href
overwindow.location
, вы забыли, что вопрос на самом делеwindow.location.replace()
TLDR; use location.href or better use window.location.href;
TLDR - это линия. Остальное «ответ».mystring = location.href = "#/some/spa/route"
. Кроме того, многие языки допускают (неявное) приведение типов каким-либо образом. В конце концов, javascript - это динамический типизированный язык, в него помещают концепции типов и говорят, что это нехорошо.console
или затеняетwindow
- теперь у вас есть большая проблема.