JavaScript URL — розбір і складання адреси


URL розбирає адресу на частини — протокол, домен, порт, шлях, параметри, якір — і дозволяє їх безпечно змінювати.

автор: NagarD

Загальний опис

Розбирати адресу регулярним виразом — класична помилка, з якої народжуються найгірші баги. Адреси мають забагато крайніх випадків: порт, кирилиця в домені, екранування, відносні шляхи.

URL робить це правильно, за стандартом. Він же вміє розв'язувати відносні посилання: другим аргументом передається база, і new URL('../page', base) дасть правильну абсолютну адресу.

Параметри рядка запиту доступні через властивість searchParams — це готовий URLSearchParams, і зміни в ньому одразу відбиваються в самій адресі.

автор: NagarD

Порада

Найпростіша перевірка, чи рядок узагалі є адресою — обгорнути new URL(text) у try...catch: на сміття він чесно кидає помилку.

автор: NagarD

Синтаксис

const url = new URL("https://css.in.ua/css/properties?x=1");

властивості

Властивість Опис
href Повна адреса рядком.
pathname Шлях: /css/properties.
search Рядок запиту з ?: ?x=1.
searchParams Параметри запиту як URLSearchParams.
hash Фрагмент із #: #section.
origin Походження: протокол + хост + порт.
hostname Хост без порта.
host Хост із портом.
protocol Протокол із двокрапкою: https:.
port Порт адреси.

методи

Метод Опис
toString Повна адреса рядком.
canParse Чи можна розібрати рядок як адресу — без винятку.
createObjectURL Тимчасова blob:-адреса для Blob чи File.
revokeObjectURL Звільняє тимчасову blob:-адресу.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
URL 32+ 26+ 7+ 19+ 12+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
URL 32+ yes yes 7+

Приклади

+ запропонувати свій приклад у пісочниці

Розбір адреси, зміна параметра й відносне посилання.

const url = new URL('https://css.in.ua/css/property/gap?theme=dark#top');

console.log(url.hostname); // 'css.in.ua'
console.log(url.pathname); // '/css/property/gap'
console.log(url.hash);     // '#top'
console.log(url.searchParams.get('theme')); // 'dark'

// змінюємо параметр — адреса оновлюється сама
url.searchParams.set('theme', 'light');
console.log(url.href); // ...?theme=light#top

// відносне посилання від бази
console.log(new URL('../selector/has', url).href);

// перевірка, чи це взагалі адреса
try {
    new URL('не адреса');
} catch {
    console.log('Некоректна адреса');
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід