JavaScript 中 for...of 可直接遍历字符串每个 Unicode 字符,正确处理 emoji 和中文等多码点字符,但复杂组合 emoji 需 Intl.Segmenter 按视觉字符分割。

JavaScript 中可以用 for...of 循环直接遍历字符串的每一个字符,因为字符串是可迭代对象(String.prototype 上实现了 [Symbol.iterator] 方法)。
直接用 for...of 遍历字符串
只需把字符串作为可迭代值放在 for...of 后面,每次循环会自动取出一个 Unicode 字符(注意:是按 Unicode 码点,不是字节或 UTF-16 代理对):
const str = "Hello 世界?";
for (const char of str) {
console.log(char);
}
// 输出:H e l l o 世 界 ?(每个字符一行)
注意正确处理 emoji 和中文等多码点字符
大多数常见中文、emoji(如 ?)、带符号字母(如 ä)在现代 JS 中都能被 for...of 正确拆分为单个“用户感知字符”,前提是字符串本身是合法的 UTF-16 编码且未被错误截断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ✅ 正常 emoji(如 "?"、"??")多数能正确迭代(但复杂组合 emoji 可能仍需
Array.from(str)或正则辅助) - ⚠️ 极少数组合型 emoji(如家庭、旗帜)可能由多个码点组成,
for...of仍按码点拆分,不是严格意义上的“图形字符” - ? 如果必须保证按视觉字符(grapheme cluster)分割,建议用
Intl.Segmenter(较新 API,需检查兼容性)
对比其他遍历方式
相比传统方法,for...of 更简洁安全:
立即学习“Java免费学习笔记(深入)”;
- 不用
for (let i = 0; i —— 避免代理对越界(如直接访问 <code>str[0]在某些 emoji 上可能出错) - 不用
str.split('')—— 不创建中间数组,内存更友好 - 不依赖
Array.from(str)—— 虽然它也支持,但for...of更直接、语义更清晰
实用小技巧
结合解构或条件逻辑快速处理:
- 跳过空格:
if (char === ' ') continue; - 收集字母:
if (/[a-zA-Z\u4e00-\u9fa5]/.test(char)) letters.push(char); - 转为数组再操作:
const chars = [...str];(利用扩展运算符,底层也是调用 same iterator)

















