如何操作URL_JavaScript中URL对象如何解析和构建
发布时间 - 2026-01-04 00:00:00 点击率:次URL构造函数可解析protocol、hostname、pathname、search、hash等只读属性,要求输入为完整合法URL(含协议和主机),否则报错;相对路径需提供base URL;修改查询参数须用URLSearchParams。
URL 构造函数能解析哪些部分
JavaScript 的 URL 构造函数会把传入的字符串按标准 URL 格式拆解成多个只读属性,比如 protocol、hostname、pathname、search、hash 等。它要求输入必须是**完整且语法合法的 URL**(即至少含协议和主机名),否则抛出 TypeError: Invalid URL。
-
new URL("https://example.com/path?k=v#section")✅ 成功 -
new URL("/path?k=v")❌ 报错:缺少协议和主机 -
new URL("example.com/path")❌ 报错:不是有效 URL(没协议)
如果只有相对路径,得手动补上基础 URL 才能解析:new URL("/path?k=v", "https://a.b") → 主机变为 a.b,路径为 /path。
修改 search 参数要用 URLSearchParams
URL 对象的 search 属性是只读字符串(如 "?a=1&b=2"),不能直接拼接或正则替换。真正安全、可维护的做法是用 URLSearchParams 实例操作参数:
const url = new URL("https://api.example.com/data?limit=10");
url.searchParams.set("offset", "20");
url.searchParams.append("sort", "desc");
console.log(url.href); // https://api.example.com/data?limit=10&offset=20&sort=desc
-
set(key, value)覆盖已有键(只保留一个) -
append(key, value)总是新增,支持重复键(如?tag=a&tag=b) -
delete(key)移除所有匹配键值对 - 直接赋值
url.search = "?x=1"会重置整个查询串,但丢失原有参数结构逻辑
构建 URL 时 protocol 和 hostname 不能省略
即使目标是同源请求,也不能靠省略协议或主机来“简化”构造。下面这些写法都无效:
立即学习“Java免费学习笔记(深入)”;
-
new URL("//api.example.com/v1", location)→ 协议未继承,报错 -
new URL("/v1?x=1", "example.com")→ 主机字符串缺协议,报错 -
new URL("/v1", location.origin)✅ 正确:以当前页面 origin 为 base
常见安全做法是显式使用 location.origin 或已知可信的 https://... 字符串作 base,避免因 base 不合法导致整个 URL 构造失败。
注意 pathname 的开头斜杠和编码行为
URL.pathna 始终以
me/ 开头(即使是根路径 /),且自动对路径中非 ASCII 字符或特殊符号做百分号编码:
const u = new URL("https://x.y/z 三/α?k=1");
console.log(u.pathname); // "/z%20%E4%B8%89/%CE%B1"
console.log(u.search); // "?k=1"
- 手动设置
url.pathname = "/user/张"会被自动编码为/user/%E5%BC%A0 - 若需保持原始字符串不做编码,只能拼接在
href上(但失去结构化优势) - 路径末尾多斜杠(如
//api//v1/)会被规范为单斜杠(/api/v1/)
路径解析依赖浏览器的 URL 标准实现,不同环境(如某些 Node.js 版本)对边缘 case 处理略有差异,生产中建议始终用 URL + URLSearchParams 组合,别手写字符串拼接。
# javascript
# java
# js
# node.js
# node
# 编码
# 浏览器
# app
# 键值对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Bootstrap整体框架之JavaScript插件架构
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
微信小程序 require机制详解及实例代码
如何选择PHP开源工具快速搭建网站?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何快速生成高效建站系统源代码?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
JavaScript Ajax实现异步通信
如何在万网开始建站?分步指南解析
如何用狗爹虚拟主机快速搭建网站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
iOS UIView常见属性方法小结
香港服务器租用每月最低只需15元?
如何实现javascript表单验证_正则表达式有哪些实用技巧
详解CentOS6.5 安装 MySQL5.1.71的方法
如何用VPS主机快速搭建个人网站?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
微信小程序 五星评分(包括半颗星评分)实例代码
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何快速查询网址的建站时间与历史轨迹?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何自定义建站之星模板颜色并下载新样式?
Android okhttputils现在进度显示实例代码
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Java垃圾回收器的方法和原理总结
高防服务器租用首荐平台,企业级优惠套餐快速部署
微信小程序 wx.uploadFile无法上传解决办法
如何在Windows 2008云服务器安全搭建网站?
Laravel怎么实现验证码(Captcha)功能
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel如何配置Horizon来管理队列?(安装和使用)
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在IIS中新建站点并配置端口与IP地址?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel中的withCount方法怎么高效统计关联模型数量

