#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/