<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Что такое window.location.href в JavaScript: свойства, методы и примеры]]></title><description><![CDATA[<p dir="auto">Window.location.href — это свойство объекта window.location в JavaScript, которое возвращает или устанавливает полный URL текущей страницы. Оно помогает разработчикам читать адрес страницы и перенаправлять пользователя без перезагрузки всей страницы. Это решает задачи вроде динамической навигации, проверки параметров URL и создания SPA-приложений.</p>
<p dir="auto">С его помощью можно легко анализировать, откуда пришел пользователь, или отправить его на другую страницу. Полезно для фронтенд-разработки, когда нужно работать с адресной строкой браузера. Давайте разберем, как это работает на практике.</p>
<h2>Как работает window.location.href</h2>
<p dir="auto">Объект window.location — это часть BOM (Browser Object Model), которая дает доступ к информации о текущем URL. Свойство <strong>href</strong> содержит полную строку адреса, включая протокол, домен, путь, параметры и якорь. Когда вы присваиваете новое значение href, браузер автоматически загружает указанную страницу и добавляет запись в историю.</p>
<p dir="auto">Например, если страница открыта по адресу <a href="https://example.com/page?id=123#section" target="_blank" rel="noopener noreferrer">https://example.com/page?id=123#section</a>, то window.location.href вернет именно эту строку. Это удобно для условной логики: проверяем URL и показываем разный контент. А если нужно перенаправить — просто пишем window.location.href = ‘новый_url’. Но учтите, что это вызывает навигацию, как обычный клик по ссылке.</p>
<ul>
<li><strong>Получение URL:</strong> console.log(window.location.href); — выведет текущий адрес в консоль.</li>
<li><strong>Изменение URL:</strong> window.location.href = ‘<a href="https://example.com/new-page" target="_blank" rel="noopener noreferrer">https://example.com/new-page</a>’; — перенаправит пользователя.</li>
<li><strong>Проверка параметров:</strong> if (window.location.href.includes(‘id=123’)) { /* код */ } — выполнит действие при наличии параметра.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Свойство</th>
<th>Описание</th>
<th>Пример значения</th>
</tr>
</thead>
<tbody>
<tr>
<td>href</td>
<td>Полный URL</td>
<td><a href="https://example.com/page?id=1#hash" target="_blank" rel="noopener noreferrer">https://example.com/page?id=1#hash</a></td>
</tr>
<tr>
<td>protocol</td>
<td>Протокол</td>
<td>https:</td>
</tr>
<tr>
<td>host</td>
<td>Хост и порт</td>
<td><a href="http://example.com:8080" target="_blank" rel="noopener noreferrer">example.com:8080</a></td>
</tr>
<tr>
<td>pathname</td>
<td>Путь</td>
<td>/page</td>
</tr>
</tbody>
</table>
<h2>Основные свойства объекта window.location</h2>
<p dir="auto">Window.location — это не только href, но и набор свойств для разбора URL на части. Каждое свойство доступно для чтения и записи (кроме origin в некоторых случаях). Изменение любого свойства, кроме hash, приводит к перезагрузке страницы. Это позволяет точно манипулировать адресом без ручного парсинга строки.</p>
<p dir="auto">Возьмем реальный сценарий: пользователь зашел на /profile?user=john. С помощью pathname вы проверяете путь, search — параметры, hash — якорь для скролла. Такие свойства упрощают работу с динамическими ссылками в React или Vue. А host помогает убедиться, что код выполняется на правильном домене, избегая ошибок в продакшене.</p>
<ul>
<li><strong>hostname:</strong> Возвращает домен без порта, например ‘<a href="http://example.com" target="_blank" rel="noopener noreferrer">example.com</a>’. Полезно для проверки поддомена.</li>
<li><strong>port:</strong> Номер порта, как ‘8080’. Часто используется в dev-средах.</li>
<li><strong>search:</strong> Строка запроса с ‘?’, например ‘?id=123’. Идеально для GET-параметров.</li>
<li><strong>hash:</strong> Якорь с ‘#’, для навигации внутри страницы без релоада.</li>
<li><em>Важно:</em> Изменение hash не перезагружает страницу, что критично для SPA.*</li>
</ul>
<pre><code class="language-javascript">console.log(window.location.pathname); // '/profile'
console.log(window.location.search);   // '?user=john'
console.log(window.location.hash);     // '#section'
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Свойство</th>
<th>Чтение</th>
<th>Запись</th>
<th>Влияние на историю</th>
</tr>
</thead>
<tbody>
<tr>
<td>href</td>
<td>Да</td>
<td>Да</td>
<td>Добавляет запись</td>
</tr>
<tr>
<td>pathname</td>
<td>Да</td>
<td>Да</td>
<td>Перезагружает</td>
</tr>
<tr>
<td>search</td>
<td>Да</td>
<td>Да</td>
<td>Перезагружает</td>
</tr>
<tr>
<td>hash</td>
<td>Да</td>
<td>Да</td>
<td>Не перезагружает</td>
</tr>
</tbody>
</table>
<h2>Методы для навигации и обновления</h2>
<p dir="auto">Помимо свойств, window.location предлагает методы вроде assign() и reload(). Метод <strong>assign(url)</strong> похож на присвоение href — перенаправляет и добавляет в историю. <strong>Replace(url)</strong> меняет URL без записи в историю, что полезно для редиректов без ‘назад’. Reload() перезагружает страницу, с параметром true — принудительно из сервера.</p>
<p dir="auto">Представьте авторизацию: после логина assign(‘/dashboard’) отправит на дашборд с записью в историю. А replace(‘/login’) на форме входа скроет исходный URL. Это стандарт в веб-приложениях для чистой навигации. Методы работают одинаково в фреймах, если получить contentWindow.</p>
<ul>
<li><strong>assign(url):</strong> Навигация с добавлением в историю. Эквивалент window.location.href = url.</li>
<li><strong>replace(url):</strong> Замена текущей записи в истории, кнопка ‘Назад’ не сработает.</li>
<li><strong>reload(force):</strong> Перезагрузка, force=true игнорирует кэш.</li>
</ul>
<p dir="auto"><em>Нюанс: В фреймах используйте frame.contentWindow.location.href для целевого перенаправления.</em></p>
<pre><code class="language-javascript">window.location.assign('https://example.com');
window.location.replace('https://example.com/login');
window.location.reload(true);
</code></pre>
<h2>Разница с window.open и другими подходами</h2>
<p dir="auto">Часто путают window.location.href с window.open(). Первое меняет текущую страницу, второе открывает новое окно или вкладку. Href добавляет в историю, open — нет, и позволяет задавать размеры. Выбирайте href для внутренней навигации, open — для внешних ссылок вроде ‘Поделиться’.</p>
<p dir="auto">В SPA history API (pushState) заменяет href для изменения URL без релоада. Но location все равно нужен для начальной проверки. Сравните: href для простых задач, open для попапов, history.pushState для продвинутой маршрутизации.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Метод</th>
<th>Новое окно</th>
<th>История</th>
<th>Пример использования</th>
</tr>
</thead>
<tbody>
<tr>
<td>location.href</td>
<td>Нет</td>
<td>Да</td>
<td>Внутренний редирект</td>
</tr>
<tr>
<td>open(url)</td>
<td>Да</td>
<td>Нет</td>
<td>Попап или вкладка</td>
</tr>
<tr>
<td>replace(url)</td>
<td>Нет</td>
<td>Нет</td>
<td>Скрытый редирект</td>
</tr>
</tbody>
</table>
<h2>Когда location.href меняет правила игры</h2>
<p dir="auto">Даже с современными фреймворками window.location.href остается базовым инструментом. Он работает везде — от vanilla JS до Angular, и не зависит от библиотек. Подумайте о сценариях вроде A/B-тестирования по URL или защиты от фрейминга через replace(). Осталось пространство для комбинаций с localStorage или сервис-воркерами.</p>
<p dir="auto">В реальных проектах href сочетают с URLSearchParams для парсинга параметров. Это дает гибкость без внешних deps. Над чем подумать: как интегрировать с PWA для оффлайн-навигации или SSR для серверных редиректов.</p>
]]></description><link>https://forum.exlends.ru/topic/587/chto-takoe-window.location.href-v-javascript-svojstva-metody-i-primery</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:11:54 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/587.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Feb 2026 05:01:01 GMT</pubDate><ttl>60</ttl></channel></rss>