Array.from 可简洁将字符串转为 Unicode 编码数组,支持 emoji 的 codePointAt(0) 比 charCodeAt 更准确;亦可生成连续字符编码,需注意空值校验与 length 显式声明。

Array.from 可以轻松将字符串转为对应字符的 Unicode 编码数组,比传统 for 循环或 map + charCodeAt 更简洁直观。
直接映射字符到 codePoint
Array.from 接收一个可遍历对象(如字符串)和一个映射函数,天然适合逐字符处理。对每个字符调用 charCodeAt(0) 或更推荐的 codePointAt(0),即可得到编码值。
- codePointAt(0) 支持 Unicode 辅助平面(如 emoji),比 charCodeAt 更准确
- 字符串本身是可迭代对象,无需额外转换
- 一行代码完成“字符串 → 编码数组”转换
基础用法示例
生成 ASCII 字符串的编码数组:
Array.from('hello', c => c.codePointAt(0)) // [104, 101, 108, 108, 111]处理含 emoji 的字符串(验证 codePointAt 的必要性):
OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。
立即学习“Java免费学习笔记(深入)”;
Array.from('??', c => c.codePointAt(0)) // [128104](正确)Array.from('??', c => c.charCodeAt(0)) // [55357](错误,只取了代理高位)
扩展:生成指定范围的编码数组
结合 Array.from 的类数组特性,还能生成连续数字对应的字符编码:
- 生成 a–z 的 Unicode 编码:Array.from({length: 26}, (_, i) => 'a'.codePointAt(0) + i)
- 生成 0–9 字符的编码:Array.from({length: 10}, (_, i) => `${i}`.codePointAt(0))
- 注意:传入类数组对象时需显式提供 length,且映射函数第二个参数是索引
注意事项
避免常见误区:
- 不要对 null 或 undefined 调用 Array.from,会报错;建议先做类型判断
- 空字符串返回空数组:Array.from('', c => c.codePointAt(0)) // []
- 若只需 ASCII 范围且确定无 emoji,charCodeAt 仍可用,但 codePointAt 是更健壮的选择

















