扩展运算符可将字符串精准转为单字符数组,如[..."hello"]→["h","e","l","l","o"],正确处理emoji、中文及unicode代理对,比split("")更可靠。

用扩展运算符 ... 把字符串转成单字符数组,只需写成 [..."字符串"],一行就搞定。
基本写法:直接展开进数组字面量
扩展运算符作用于字符串时,会把每个可迭代的字符(包括 emoji、中文、Unicode 补充平面字符)逐个取出,生成新数组:
-
const chars = [..."hello"];→["h", "e", "l", "l", "o"] -
const emojis = [..."???"];→["?", "?", "?"](正确识别 Unicode 32 位字符) -
const cn = [..."你好"];→["你", "好"]
为什么比 split("") 更可靠
split("") 在处理某些 Unicode 字符(如 emoji 组合、带修饰符的字符、代理对)时可能切错位置,产生乱码或截断;而扩展运算符基于字符串的 可迭代协议,天然支持 UTF-16 编码的完整字符单元(code points),无需额外处理。
- 错误示例:
"??".split("")可能拆成 4–5 个碎片(如["", "", "", ""]) - 正确方式:
[..."??"]稳定返回["??"](一个完整表情)
其他等效但稍冗余的方式
虽然扩展运算是最直观的选择,但还有两个标准方法也能实现相同效果:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
Array.from("hello")—— 显式调用,语义清晰,也支持映射回调 -
Array.prototype.slice.call("hello")—— ES5 兼容写法,已不推荐
注意:new Array("hello") 或 ["hello"] 是创建含一个字符串元素的数组,不是拆解,别混淆。
实际使用小提示
拆解后得到的是真正的数组,可直接链式调用数组方法:
- 反转字符:
[..."abc"].reverse().join("")→"cba" - 去重并还原:
[...new Set("aabbcc")].join("")→"abc" - 过滤空格:
[..."hello world"].filter(c => c !== " ").join("")→"helloworld"
不复杂但容易忽略细节。










