Skip to content

五、URL

快速开始

解析 URL 参数

利用 URL 构造函数和 searchParams 属性,可以极其轻松地提取查询参数。

javascript
const url = new URL('https://example.com/search?q=js&sort=desc&page=1');

// 获取特定参数
const query = url.searchParams.get('q'); 
const page = url.searchParams.get('page');

console.log(query); // "js"
console.log(page);   // "1"

修改或添加参数

使用 searchParams.set() 可以自动处理参数的增删改,无需手动拼接字符串。

javascript
const url = new URL('https://example.com/search?q=js');

// 修改现有参数或添加新参数
url.searchParams.set('q', 'typescript'); // 修改 q
url.searchParams.set('sort', 'asc');     // 添加 sort

console.log(url.toString());
// "https://example.com/search?q=typescript&sort=asc"

删除参数

使用 searchParams.delete() 移除不需要的参数。

javascript
const url = new URL('https://example.com/search?q=js&token=123&debug=true');

// 删除特定参数
url.searchParams.delete('token');
url.searchParams.delete('debug');

console.log(url.toString());
// "https://example.com/search?q=js"

获取当前页面的所有参数

在浏览器环境中,直接使用 window.location.search

javascript
const params = new URLSearchParams(window.location.search);

const userId = params.get('id');
const source = params.get('source');

console.log(userId, source);

解析绝对路径与相对路径

URL 构造函数支持第二个参数作为“基础路径”,非常适合处理相对链接。

javascript
// 基础 URL
const base = 'https://example.com/blog/post/1';

// 解析相对路径
const url1 = new URL('/about', base);
const url2 = new URL('../contact', base);
const url3 = new URL('https://other.com', base);

console.log(url1.href); // "https://example.com/about"
console.log(url2.href); // "https://example.com/blog/contact"
console.log(url3.href); // "https://other.com/"

获取 URL 的各个部分

轻松提取协议、域名、端口、路径等。

javascript
const url = new URL('https://user:pass@example.com:8080/path/page?query=1#hash');

console.log(url.protocol); // "https:"
console.log(url.hostname); // "example.com"
console.log(url.port);     // "8080"
console.log(url.pathname); // "/path/page"
console.log(url.hash);     // "#hash"
console.log(url.username); // "user"
console.log(url.password); // "pass"

将参数对象转换为 URL 字符串

利用 URLSearchParams 构造函数直接传入对象。

javascript
const paramsObj = { q: 'javascript', category: 'frontend', page: '1' };
const params = new URLSearchParams(paramsObj);

const fullUrl = `https://example.com/search?${params.toString()}`;

console.log(fullUrl);
// "https://example.com/search?q=javascript&category=frontend&page=1"

检查参数是否存在

使用 searchParams.has() 进行快速判断。

javascript
const url = new URL('https://example.com/dashboard?admin=true');

if (url.searchParams.has('admin')) {
  console.log('这是管理员页面');
}