Object.assign只传一个参数时返回原目标对象,因其实质是将源对象属性复制到目标对象并始终返回该目标,无源对象时即无操作;它不创建新对象,故非浅拷贝。

Object.assign 在只传一个参数(即目标对象)时,会直接返回该目标对象本身,不创建新对象,也不做任何拷贝操作。
为什么只传一个参数会返回原对象?
因为 Object.assign 的设计逻辑是:把后续所有源对象的可枚举自有属性复制到第一个参数(目标对象)上,并**始终返回这个目标对象**。如果只传一个参数,就没有源对象可复制,目标对象不变,自然就原样返回。
这和“浅拷贝”没有直接关系——浅拷贝行为只在有源对象参与赋值时才体现;单参数调用本质是“无操作 + 返回目标”。
通过 REST API 管理 Kibana 保存的对象(仪表板、Lens 可视化等)。适用于:① 以编程方式创建、更新、删除仪表板和 Lens 可视化。
实际表现示例
以下代码中,obj 和 result 指向同一个对象:
立即学习“Java免费学习笔记(深入)”;
const obj = { a: 1, b: { c: 2 } };
const result = Object.assign(obj);
console.log(result === obj); // true
result.a = 99;
console.log(obj.a); // 99 —— 修改 result 就等于修改 obj
常见误解与注意点
- 它不是“创建副本”,而是“返回目标引用”——哪怕目标是字面量对象,也仍是原引用
- 若目标是 null 或 undefined,会抛出 TypeError;其他原始值(如字符串、数字)会被包装成对象再返回(但极少这么用)
- 想实现单对象浅拷贝,应显式传入空对象作为目标:Object.assign({}, obj)
对比:真正浅拷贝的写法
要获得一个新对象副本(避免修改原对象),必须提供一个空对象作为第一个参数:
const obj = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, obj); // ✅ 浅拷贝
console.log(copy === obj); // false
copy.a = 99;
console.log(obj.a); // 1 —— 原对象未被改动

















