array.from 可将字符串正确转为字符数组,能准确处理 unicode 字符(如 emoji、中文、组合字符),而 split('') 会按 utf-16 码元错误拆分;它还支持映射函数,但仅接受可迭代对象。

Array.from 可以把字符串直接转成字符数组,而且能正确处理 Unicode 字符(比如 emoji、中文、带修饰符的字符),比 split('') 更可靠。
为什么不用 split('')?
字符串的 split('') 会把某些 Unicode 字符(如 ?、??、é(带重音符号))错误地拆成多个码元,导致结果出错。而 Array.from 基于字符串的迭代器,天然按“字符”而非“UTF-16 码元”分割。
-
'?'.split('')→['', ''](乱码) -
Array.from('?')→['?'](正确) -
'??'.split('')→ 拆成多个碎片,长度可能为 4 或 5 -
Array.from('??')→['??'](单个元素)
基本用法:字符串 → 字符数组
直接传入字符串即可,返回一个由每个字符组成的数组:
Array.from('hello') // ['h', 'e', 'l', 'l', 'o']
Array.from('你好') // ['你', '好']
Array.from('a?b') // ['a', '?', 'b']
配合 map 做字符映射处理
第二个参数可以传一个映射函数,在生成数组的同时转换每个字符:
-
Array.from('abc', x => x.toUpperCase())→['A', 'B', 'C'] -
Array.from('123', Number)→[1, 2, 3] -
Array.from('???', c => c.codePointAt(0).toString(16))→ 每个 emoji 的 Unicode 编码(十六进制)
注意:它不改变原字符串,也不支持类数组对象以外的其他类型
Array.from 要求第一个参数是可迭代对象。字符串满足条件;数字、布尔值等原始类型会报错。
- ✅
Array.from('ab')—— 正确 - ❌
Array.from(123)—— 报错:TypeError: 123 is not iterable - ✅
Array.from({length: 3}, (_, i) => i)—— 用于生成数组(非字符串场景)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











