ES6 中对象的新增方法Object.assign()

用来合并对象

基本用法

const apple = {
	color: 'red',
	shape: 'circle',
	taste: 'sweet'
};
const pen = {
	color: 'black',
	shape: 'cylinder',
	use: 'write'
};
console.log(Object.assign(apple, pen)); // {color: "black", shape: "cylinder", taste: "sweet", use: "write"} 
// 相同属性后面的覆盖前面的,不同的可以共存

与对象扩展符的区别

console.log({...apple, ...pen}); // {color: "black", shape: "cylinder", taste: "sweet", use: "write"} 

看起来好像是一样的结果,实则还是有一定区别的,继续往下看:

console.log({...apple, ...pen} === apple); // false 实际上是得到了一个新的对象
console.log(Object.assign(apple, pen) === apple); // ture 实际上是把pen合并到apple中,apple对象发生改变
// 如果我也想像对象扩展一样操作完得到一个新的对象呢?
console.log(Object.assign({}, apple, pen) === apple); // false 输出结果一样,就是变成得到一个新的对象,此时apple与pen不会发生变化

注意事项

1.基本数据类型作为源对象

前置知识:什么是源对象?

Object.assign(target, source1, source2, ...);

target:目标对象,最终返回的对象
source:源对象,希望用来合并的对象,不一定只有一个

// 与对象的展开类似,即转换成对象,再合并
console.log(Object.assign({}, undefined)); // {}
console.log(Object.assign({}, null)); // {}
console.log(Object.assign({}, 1)); // {}
console.log(Object.assign({}, true)); // {}

// 比较不一样的是字符串
console.log(Object.assign({}, 'str')); // {0: "s", 1: "t", 2: "r"}

2.同名属性的替换

后面的直接覆盖前面的,上面的例子再看一遍:

const apple = {
	color: 'red',
	shape: 'circle',
	taste: 'sweet'
};
const pen = {
	color: 'black',
	shape: 'cylinder',
	use: 'write'
};
console.log(Object.assign({}, apple, pen)); // {color: "black", shape: "cylinder", taste: "sweet", use: "write"} 

我们把apple和pen对象稍微做一些改变:

const apple = {
	color: ['red', 'yellow'],
	shape: 'circle',
	taste: 'sweet'
};
const pen = {
	color: ['black','silver'],
	shape: 'cylinder',
	use: 'write'
};
console.log(Object.assign({}, apple, pen)); // {color: ["black","silver"], shape: "cylinder", taste: "sweet", use: "write"}
// 这里就看得出来,后面的覆盖前面的

应用

合并默认参数用户参数

const logUser = userOptions => {
	// 默认参数
	const DEFAULTS = {
		user: 'Jae',
		age: 22,
		sex: 'male'
	};
	const options = Object.assign({}, DEFAULTS, userOptions);
	console.log(options);
};
logUser(); // {user: "Jae", age: 22, sex: "male"} 使用默认参数
logUser({user: 'Tom'}); // {user: "Tom", age: 22, sex: "male"} 用户参数覆盖默认参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大杯美式不加糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值