Подтвердить что ты не робот

Какая разница между window.location = и window.location.replace()?

Есть ли разница между этими двумя строками?

var url = "http://www.google.com/";
window.location = url;
window.location.replace (url);
4b9b3361

Ответ 1

Первый добавляет элемент в вашу историю, в котором вы можете (или должны быть в состоянии) нажать "Назад" и вернуться к текущей странице.

Второй заменяет текущий элемент истории, поэтому вы не можете вернуться к нему.

См. window.location:

assign(url): Загрузите документ в предоставленный URL.

replace(url): Заменить текущий документ с указанным в URL. Отличие от assign() заключается в том, что после использования replace() текущая страница не будет сохраняться в истории сеансов, что означает пользователь не сможет использовать Back для перехода к нему.

Oh и вообще говоря:

window.location.href = url;

предпочтительнее:

window.location = url;

Ответ 2

TL;DR;

использовать location.href или лучше использовать window.location.href;

Однако, если вы прочтете это, вы получите неопровержимое доказательство.

Истина в том, что это хорошо, но зачем делать то, что вызывает сомнения. Вы должны идти по более высокой дороге и просто делать это так, как это должно быть сделано.

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

Этот код является совершенно корректным по синтаксису, логически мудрый, по типу вы знаете, что с ним что-то не так?

он имеет location вместо location.href

как насчет этого

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

каково значение mystring? кто-нибудь действительно знает, не выполняя какой-либо тест. Никто не знает, что именно произойдет здесь. Черт, я просто написал это, и я даже не знаю, что он делает. location - это объект, но я назначаю строку, она передаст строку или передаст объект местоположения. Допустим, есть ответ на то, как это должно быть реализовано. Можете ли вы гарантировать, что все браузеры будут делать то же самое?

Это может привести к тому, что все браузеры будут обрабатывать то же самое.

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

Как насчет того, помещаете ли вы это в typescript, он сломается, потому что компилятор типа скажет, что это предположительно быть объектом?

Этот разговор гораздо глубже, чем только объект location. Какое это преобразование касается того, кем вы хотите быть программистом?

Если вы возьмете это короткое сокращение, да, сегодня может быть хорошо, завтра это может быть хорошо, черт возьми, все может быть навсегда, но вы, сэр, теперь плохо программист. Это не будет хорошо для вас, и это не поможет вам.

Будет больше объектов. Появится новый синтаксис.

Вы можете определить геттер, который принимает только строку, но возвращает объект, а худшая часть - вы думаете, что делаете что-то правильно, вы можете подумать, что вы блестящий для этого умного метода, потому что люди здесь позорно сбивают вас с пути.

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

С помощью getters и seters этот код действительно работает, но только потому, что это можно сделать, это не значит, что это WISE для этого.

Большинство людей, которые программируют любовь к программе и любят поправляться. За последние несколько лет я получил неплохую и многому научился. Самое главное, что я знаю сейчас, особенно когда вы пишете библиотеки, - это последовательность и предсказуемость.

Выполняйте то, что вы можете последовательно выполнять.

+"2" < - это право здесь анализирует строку на число. если вы его используете? или вы должны использовать parseInt("2")?

как насчет var num =+"2"?

Из того, что вы узнали, из умов stackoverflow я не слишком надеюсь.

Если вы начнете следовать этим двум словам, последовательным и предсказуемым. Вы узнаете правильный ответ на тонну вопросов о stackoverflow.

Позвольте мне показать вам, как это окупается. Обычно я помещаю ; в каждую строку javascript, которую я пишу. Я знаю, что это более выразительно. Я знаю это более ясно. Я следовал своим правилам. Однажды я решил не делать этого. Зачем? Потому что многие люди говорят мне, что он больше не нужен, и JavaScript может обойтись без него. Так что я решил сделать это. Теперь, поскольку я уверен в себе как программист (поскольку вы должны наслаждаться плодом овладения языком), я написал что-то очень простое, и я не проверял его. Я стирал одну запятую, и я не думал, что мне нужно перепроверить такую ​​простую вещь, как удаление одной запятой.

Я написал нечто подобное этому в es6 и babel

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

Этот код терпит неудачу и навсегда задумался. По какой-то причине то, что он увидел, было

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

скрытый глубоко внутри исходного кода, он говорил мне, что "hello world" не является функцией.

Для большего удовольствия node не отображает исходные карты transpiled code.

Впустую столько глупого времени. Я также рассказывал кому-то о том, как ES6 является блестящим, а затем мне пришлось начать отладку и продемонстрировать, насколько головная боль бесплатна и лучше ES6. Не убедительно.

Надеюсь, это ответ на ваш вопрос. Это старый вопрос, который больше для будущего поколения, людей, которые все еще учатся.

Вопрос, когда люди говорят, что это не имеет значения, в любом случае работает. Скорее всего, более умный более опытный человек скажет вам другие мудрые.

что, если кто-то перезапишет объект местоположения. Они сделают прокладку для старых браузеров. Он получит какую-то новую функцию, которая должна быть переделана, и ваш трехлетний код будет терпеть неудачу.

Мое последнее замечание, чтобы обдумать.

Написание чистого, понятного целенаправленного кода делает что-то для вашего кода, который не может отвечать правильным или неправильным. Что он делает, так это сделать ваш код эффективным.

Вы можете использовать больше плагинов, Библиотеки, не опасаясь прерывания между кодами.

для записи. использовать

window.location.href