2025年,跟 encodeURIComponent() 说再见吧

说起来你可能不信,很长时间以来,我们这些 JavaScript 程序员就像是在用石器时代的工具------encodeURIComponent() 来确保 URL 查询参数的安全性。说它能用吧,确实能用......但就是让人用得不爽。

想象一下,你每次都得把动态数据包在 encodeURIComponent() 里,然后手动拼接字符串,还得反复检查每个 &? 有没有写对。就像是用算盘算账一样,虽然能算出结果,但过程实在太痛苦了。

幸好,现代的 URL API 给了我们一个更清爽、更安全的选择。咱们一起来看看吧!

手动编码的噩梦

假设你正在为一个商品搜索页面构建链接,传统的做法是这样的:

ini 复制代码
const keyword = "coffee & cream";
const category = "beverages";

const url =
  "https://shop.example.com/search?query=" +
  encodeURIComponent(keyword) +
  "&cat=" +
  encodeURIComponent(category);

console.log(url);
// "https://shop.example.com/search?query=coffee%20%26%20cream&cat=beverages"

看到了吗?这代码就像是在搭积木,一块一块地拼,稍微不小心就会出错。忘记 encodeURIComponent() 的话,URL 直接就废了。

更干净的方法:new URL()

有了现代的 URL API,我们就不用操心编码的细节了:

vbscript 复制代码
const url = new URL("https://shop.example.com/search");
url.searchParams.set("query", "coffee & cream");
url.searchParams.set("cat", "beverages");

console.log(url.toString());
// "https://shop.example.com/search?query=coffee+%26+cream&cat=beverages"

是不是清爽多了?就像是从手洗衣服升级到了洗衣机------省心又高效。

为什么这样更好?

URL API 有这些好处:

自动编码 → 不用担心特殊字符,API 会自动处理
更易读 → 代码逻辑一目了然,不用在一堆字符串拼接中找 bug
灵活性 → 随时添加、更新或删除参数,不用重写字符串
通用支持 → 现代浏览器和 Node.js 都支持

不只是搜索查询

你可以用这个方法处理各种动态链接。比如构建一个天气预报的 URL,包含多个参数:

vbscript 复制代码
const url = new URL("https://api.weather.com/forecast");
url.searchParams.set("city", "Los Angeles");
url.searchParams.set("unit", "imperial");
url.searchParams.set("days", 5);

console.log(url.toString());
// "https://api.weather.com/forecast?city=Los+Angeles&unit=imperial&days=5"

如果用 encodeURIComponent() 来做,代码会长很多,还更难读懂。

现在你可以忘掉的东西

  • • 把每个值都包在 encodeURIComponent()
  • • 用 + "&param=" + 拼接字符串
  • • 担心漏掉分隔符(?&
  • • 处理特殊字符和空格
  • • 调试那些看起来像外星文的 URL 字符串

最后的话

还记得我们从 callback 过渡到 async/await 的时候吗?现在是时候和 encodeURIComponent() 说再见了。

URLURLSearchParams API 为你提供了一种现代、优雅的方式来构建安全、可读且易于维护的链接。

下次生成 URL 的时候,跳过那些老套路,让 new URL() 来处理复杂的部分吧!

就像换了新手机一样,用过新方法之后,你绝对不想再回到石器时代了。

相关推荐
云水一下8 小时前
Vue.js从零到精通系列(一):初识Vue——背景、环境与第一个应用
前端·javascript·vue.js
大大杰哥8 小时前
Vue2学习(1)--了解基本方法与概念
javascript·学习·vue
云水一下8 小时前
Vue.js从零到精通系列(二):响应式核心——ref、reactive、computed与watch
前端·javascript·vue.js
放下华子我只抽RuiKe58 小时前
FastAPI 全栈后端(二):路由与数据模型
前端·人工智能·react.js·前端框架·html·fastapi
lichenyang4539 小时前
ArkTS 严格类型系统:我答错 2 道题后才真正搞懂的几条规则
前端
小小小小宇9 小时前
定高、不定高、瀑布流虚拟列表
前端
天启HTTP9 小时前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
卡布鲁9 小时前
Webpack 核心原理与自定义 Loader/Plugin 实战
前端·javascript
小林ixn9 小时前
从拼多多手机号验证到模板引擎:深入正则表达式与 JS 字符串处理
开发语言·javascript·正则表达式
智码看视界9 小时前
Web Storage 的无障碍实践与工程化应用
前端·javascript·web