Url的方法简单整理
[[toc]]
URL 实例的属性
当你创建一个 URL
对象时,可以通过这些属性访问或修改 URL 的各部分:
const url = new URL("https://example.com:8080/path/name?query=value#hash");
|
属性 |
说明 |
示例输出 |
href |
完整的 URL |
"https://example.com:8080/path/name?query=value#hash" |
origin |
协议、主机和端口号组成的字符串 |
"https://example.com:8080" |
protocol |
协议部分 |
"https:" |
host |
主机名和端口号 |
"example.com:8080" |
hostname |
主机名 |
"example.com" |
port |
端口号 |
"8080" |
pathname |
路径部分(不含查询参数和片段标识符) |
"/path/name" |
search |
查询参数部分(包括 ? ) |
"?query=value" |
searchParams |
一个 URLSearchParams 对象(操作查询参数) |
URLSearchParams { "query" => "value" } |
hash |
片段标识符(包括 # ) |
"#hash" |
URLSearchParams 对象的方法
URL.searchParams
返回一个 URLSearchParams
对象,可以方便地操作查询参数:
new URLSearchParams(decodeURIComponent(window.location.search));
const params = url.searchParams;
|
方法 |
说明 |
示例 |
append(key, value) |
添加查询参数(不覆盖已有的同名参数) |
params.append("key", "value") |
set(key, value) |
设置查询参数(覆盖已有的同名参数) |
params.set("key", "value") |
get(key) |
获取查询参数的第一个值 |
params.get("key") 返回 "value" |
getAll(key) |
获取查询参数的所有值(数组形式) |
params.getAll("key") 返回 ["value1", "value2"] |
has(key) |
检查是否存在某个查询参数 |
params.has("key") 返回 true |
delete(key) |
删除某个查询参数 |
params.delete("key") |
toString() |
将查询参数序列化为字符串 |
params.toString() 返回 "key=value" |
forEach(callback) |
遍历所有键值对 |
params.forEach((value, key) => console.log(key, value)) |
URI编码解码
这些函数直接操作 URL:
方法 |
说明 |
示例 |
encodeURI(uri) |
编码整个 URI,使其可以安全地传输(保留 URI 组件分隔符,如 / , : , ? , # 等) |
encodeURI("https://example.com/测试") → "https://example.com/%E6%B5%8B%E8%AF%95" |
encodeURIComponent(uri) |
编码 URI 的一个组件(不保留分隔符),通常用于查询参数和路径片段 |
encodeURIComponent("测试") → "%E6%B5%8B%E8%AF%95" |
decodeURI(uri) |
解码通过 encodeURI 编码的 URI |
decodeURI("https://example.com/%E6%B5%8B%E8%AF%95") → "https://example.com/测试" |
decodeURIComponent(uri) |
解码通过 encodeURIComponent 编码的 URI 组件 |
decodeURIComponent("%E6%B5%8B%E8%AF%95") → "测试" |
location |
获取当前页面的完整 URL 和部分信息(仅限浏览器环境) |
location.href → 当前页面的 URL |
浏览器的 window.location
对象
window.location
提供了一些方法和属性来操作当前页面的 URL。
属性/方法 |
说明 |
示例 |
location.href |
获取/设置当前页面的完整 URL |
"https://example.com/page?query=1" |
location.origin |
获取当前页面的协议 + 主机名 + 端口号 |
"https://example.com" |
location.pathname |
获取当前页面的路径部分 |
"/page" |
location.search |
获取当前页面的查询参数部分 |
"?query=1" |
location.hash |
获取当前页面的哈希部分(# 后面的内容) |
"#section1" |
location.reload() |
重新加载当前页面 |
location.reload() |
location.assign() |
加载新页面 |
location.assign("https://new.com") |
location.replace() |
替换当前页面,不会保留历史记录 |
location.replace("https://new.com") |
浏览器的 window.history 对象
history.pushState(state, title, url)
history.pushState({ page: 1 }, "Page 1", "/page1"); console.log(location.href);
|
history.replaceState(state, title, url)
- 替换当前的历史记录条目,而不是添加新条目。
- 参数与
pushState
相同。
history.replaceState({ page: 2 }, "Page 2", "/page2"); console.log(location.href);
|
history.back()
history.forward()
history.go(delta)
- 按指定的偏移量跳转历史记录:
delta > 0
: 向前跳转。
delta < 0
: 向后跳转。
delta = 0
: 刷新当前页面。
history.go(-1); history.go(1);
|
window.history.replaceState(null, '', window.location.origin + window.location.pathname); window.location.reload();
|
Blob 和 URL 对象相关的方法
URL.createObjectURL()
- 将
Blob
或 File
对象转换为临时的 URL,用于浏览器中加载文件。
- 常用于本地图片、音视频预览。
const blob = new Blob(["Hello, world! 随便写"], { type: "text/plain" }); const url = URL.createObjectURL(blob); console.log(url);
|
URL.revokeObjectURL()
- 释放由
URL.createObjectURL()
创建的临时 URL,避免内存泄漏。 页面退出也会释放
URL.revokeObjectURL(url);
|
其他
navigator.sendBeacon()
用于低延迟、可靠发送数据到服务器,常用于页面关闭前发送统计数据。
navigator.sendBeacon("https://example.com/track", JSON.stringify({ key: "value" }));
|