array.from可快速浅拷贝数组,适用于基本类型元素;传入原数组即可生成新引用,支持映射函数和类数组对象,但嵌套对象仍共享引用,深拷贝需用json.parse(json.stringify())或structuredclone。

Array.from 可以快速克隆数组,但要注意它只做浅拷贝,适用于简单类型元素的数组。
直接传入原数组即可生成新数组
Array.from 接收一个类数组对象或可迭代对象,数组本身就是可迭代对象,所以最简用法就是直接传入:
- const newArr = Array.from(oldArr);
- 这会创建一个新数组,内容与原数组相同,但引用不同,修改 newArr 不会影响 oldArr(前提是元素是基本类型)
配合展开运算符更直观(但本质不同)
虽然 [...oldArr] 更常用,但 Array.from 的优势在于它明确表达“从某结构构造新数组”的意图,且支持额外处理:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 可在第二个参数中传入映射函数,实现克隆+转换一步完成:Array.from(oldArr, x => x * 2)
- 对类数组(如 arguments、NodeList)也适用,而展开运算符要求目标必须是可迭代对象
注意:浅拷贝不适用于嵌套对象
如果数组里包含对象或数组,Array.from 只复制外层数组结构,内部引用仍共享:
- const arr = [{ a: 1 }]; const copy = Array.from(arr); copy[0].a = 99; → 原数组也会变
- 需要深拷贝时,应改用 JSON.parse(JSON.stringify(arr))(仅限纯数据)或结构化克隆(structuredClone,现代环境支持)
兼容性与替代方案
Array.from 在 ES6+ 环境中可用(IE 不支持),若需兼容旧环境:
- 可用 Array.prototype.slice.call(oldArr) 或 [].slice.call(oldArr)
- 但 Array.from 语义更清晰,推荐在支持环境中优先使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










