JavaScript字符串编码需据场景选函数:URL整体用encodeURI(),参数值用encodeURIComponent();字符串不可变,方法均返新串;Unicode字符如emoji占双代码单元,应用Array.from()正确遍历。

JavaScript 中字符串编码和内置处理方法是日常开发的高频操作。核心在于区分“编码目的”——是为 URL 传输安全,还是为文本内容解析、提取或格式化;不同场景对应不同函数,用错容易引发乱码、请求失败或逻辑错误。
URL 场景下的三种编码函数怎么选
涉及 URL 拼接、参数传递时,必须用 encodeURI() 或 encodeURIComponent(),escape() 已被废弃,不应再使用。
-
encodeURI():用于对整个 URI(如
"https://example.com/path?name=张三")做整体编码,保留协议、斜杠、问号等结构字符,只编码语义非法字符(如中文、空格、# 等) -
encodeURIComponent():用于编码 URI 的某一部分,比如查询参数值(
name=张三中的张三),它会把/ ? = & #等也编码,更严格,更安全 - 记住一个简单原则:拼接完整地址用
encodeURI();拼 query 参数值用encodeURIComponent()
字符串基础操作与不可变性
JavaScript 字符串是原始类型、不可变的。所有方法(如 replace、slice、toUpperCase)都返回新字符串,原字符串不会被修改。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建方式推荐字面量:
const str = "Hello";,避免用new String("Hello")(生成对象,易引发隐式类型问题) - 获取单个字符可用
str.charAt(0)或str[0];区别在于越界时前者返回空字符串,后者返回undefined - 获取 Unicode 编码用
str.charCodeAt(0);反向生成字符用String.fromCharCode(72)
常用文本处理方法速查
这些方法不改变原字符串,全部返回新结果,适合链式调用:
立即学习“Java免费学习笔记(深入)”;
-
includes(sub):判断是否含子串,返回布尔值 -
indexOf(sub)/lastIndexOf(sub):返回首次/末次出现位置,未找到返回-1 -
slice(start, end):支持负数索引(如slice(-3)取后三位),end不包含 -
substring(start, end):不支持负数,start > end时自动交换 -
split(separator):按分隔符切为数组,split('')可转为字符数组 -
trim()、trimStart()、trimEnd():去除空白(包括全角空格、换行符等) -
replace(search, replacement):默认只替换第一个匹配;要全局替换需用正则:replace(/a/g, 'A')
Unicode 与多字节字符注意点
JS 字符串内部用 UTF-16 编码,部分字符(如 emoji 或生僻汉字)占两个代码单元。这意味着:
-
"??".length === 2,不是 1;用Array.from(str)或扩展运算符[...str]才能正确遍历真实字符 -
charAt()和str[i]在处理 emoji 时可能只取到代理对的一半,造成乱码 - 需要精确字符计数或切分时,优先使用
Array.from(str)或Intl.Segmenter(现代环境)

















