URL 类 详解

这是 浏览器 + Node.js 通用的官方标准 API,专门用来拆解、拼接、修改加粗样式网址,学完你处理所有链接都不用愁了。

基础用法

  1. 最简写法(完整网址)
js 复制代码
// 浏览器 / Node.js 都能直接运行
const url = new URL("https://www.baidu.com/s?wd=nodejs&page=1");
  1. 常用写法(路径 + 基础域名,处理接口最常用)
js 复制代码
// base:基础域名
// 第二个参数:相对路径
const url = new URL("/s?wd=nodejs", "https://www.baidu.com");

这个写法在 Node.js 写服务器、前端处理接口 时超级常用!

属性列表

属性名 取值 含义(通俗)
u.href 完整网址 整个链接字符串
u.protocol https: 协议(http/https/ftp)
u.host www.baidu.com:8080 域名 + 端口
u.hostname www.baidu.com 纯域名(不带端口)
u.port 8080 端口号
u.pathname /search 路径(域名后面的地址)
u.search ?wd=nodejs&page=3 完整查询参数(带?)
u.hash #chapter1 锚点(# 后面的内容)
u.origin https://www.baidu.com:8080 协议 + 域名 + 端口

这些属性既能读,也能改!

js 复制代码
u.pathname = "/home"; // 修改路径
u.port = "3000";      // 修改端口
console.log(u.href);  // 自动生成新网址

searchParams(处理?后面的参数)

searchParams 是 URL 类自带的参数管理器,不用你拆分字符串,自带一堆方法。
常用方法

js 复制代码
const u = new URL("https://xxx.com?wd=nodejs&page=2");
  1. 获取参数
js 复制代码
u.searchParams.get("wd")   // "nodejs"
u.searchParams.get("page") // "2"
  1. 修改参数
js 复制代码
u.searchParams.set("page", 10); 
// 网址变成 ?wd=nodejs&page=10
  1. 添加参数
js 复制代码
u.searchParams.append("limit", 20);
// 网址变成 ?wd=nodejs&page=10&limit=20
  1. 判断参数是否存在
js 复制代码
u.searchParams.has("wd") // true
  1. 删除参数
js 复制代码
u.searchParams.delete("page");
  1. 遍历所有参数
js 复制代码
u.searchParams.forEach((value, key) => {
  console.log(key, value);
});

特点

1. 全平台通用

  • 浏览器原生支持
  • Node.js 原生支持
  • Electron 支持
  • 手机端网页支持

2. 自动处理编码

你不用管中文乱码,URL 类自动编码 / 解码:

js 复制代码
const url = new URL("https://xxx.com?name=张三");
console.log(url.search); // ?name=%E5%BC%A0%E4%B8%89 (自动编码)
console.log(url.searchParams.get("name")); // 张三 (自动解码)
相关推荐
是谁眉眼13 小时前
npm执行错误 但黑窗口node可以成功启动问题分析
前端·npm·node.js
donecoding13 小时前
Monorepo 里有 app 也有共享包,lerna 真的还需要吗?
前端·node.js·前端工程化
阿正的梦工坊14 小时前
认证、授权、JWT、密码哈希:Node.js 鉴权到底在做什么
算法·node.js·哈希算法
Bigger1 天前
Bun 能上生产吗?我的实战结论
前端·node.js·bun
不会敲代码11 天前
从零搭建 RAG 电子书智能问答系统:天龙八部 × Milvus × LangChain
langchain·node.js·llm
T畅N2 天前
审批流设计器(前端)
前端·elementui·vue·html·流程图·js
donecoding2 天前
nrm、corepack、npm registry 三者的爱恨情仇
前端·node.js·前端工程化
明月_清风3 天前
关于node 模块化的现状与未来
前端·node.js
李白的天不白3 天前
webpack 与 webpack-cli 版本匹配问题
前端·webpack·node.js