Я видел этот код, чтобы предотвратить повторную отправку формы при перезагрузке страницы

#javascript #web-development-server #visual-web-developer-2010

Вопрос:

Я не понимаю логики в следующем js-коде. Когда он будет запущен? Когда применяется это условие и т.д.?

 if (window.history.replaceState) {
    window.history.replaceState(null, null, window.location.href);
}
 

Я понимаю, что replaceState() на самом деле это заменяет URL-адрес и, следовательно, не добавляет другую страницу в историю, но когда и почему она будет запущена? Что же if (window.history.replaceState) делать?

Комментарии:

1. Метод History.replaceState() изменяет текущую запись истории, заменяя ее на stateObj, заголовок и URL, переданные в параметрах метода. developer.mozilla.org/en-US/docs/Web/API/History/replaceState

2. if(window.history.replaceState) он проверяет, существует метод или нет

Ответ №1:

Что делает if (window.history.replaceState) :

Он оценит внутреннюю часть условия if (скобки) и проверит, соответствует ли возвращаемое значение true . Если это действительно так, то он выполнит блок кода внутри curly-brace: {} .

В JavaScript нет безопасности типов. Тип переменной всегда определяется значением, которое она содержит.

window является объектом и таковым является history . История-это свойство самого window object .

пример окна.история

replaceState относится к функции, определенной для объекта истории (опять же, как свойство). В контексте оператора if это означает:

«Пожалуйста, проверьте свойство истории в окне объекта и посмотрите, существует ли функция replaceState».

Если его не существует, он вернется обратно undefined . Undefined и null оба оцениваются как false , т. е. типизированные undefined или null к а boolean . Это называется кастингом type coercion .

логическое принуждение

Однако, если он определен, то он вернется true и if-condition будет применен. В этом случае история будет объектом и, следовательно, ее будут оценивать как true . Вы можете прочитать больше о принуждении типа, если вам интересно.

Должно быть легко понять: https://www.freecodecamp.org/news/js-type-coercion-explained-27ba3d9a2839/