我是靠谱客的博主 精明黄豆,最近开发中收集的这篇文章主要介绍ES6 对象展开运算符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基本用法

展开对象

const apple = {
	color: 'red',
	shape: 'circle',
	taste: 'sweet'
};
// 对象展开是不是跟数组一样在前面加上“...”呢?来试试看
console.log(...apple); // Uncaught TypeError: Found non-callable @@iterator

对象不能直接展开!必须在 {} 中展开

console.log({...apple}); // {color: "red", shape: "circle", taste: "sweet"}

// 这个新对象和之前的对象不是同一个,我们检测一下:
console.log({...apple} === apple); // false

总结:对象的展开就是把属性罗列出来,用逗号分隔,放到一个 {} 中,构成新对象

合并对象

const apple = {
	color: 'red',
	shape: 'circle',
	taste: 'sweet'
};
const pen = {
	color: 'balck',
	shape: 'cylinder',
	used: 'write'
};
console.log({...apple, ...pen}); // color: "balck", shape: "cylinder", taste: "sweet", used: "write"}
// 可以看到相同属性取后面对象中的,不同属性合并

注意事项

空对象的展开

console.log({...{}}); // {} 返回一个空对象

非对象的展开

如果展开的不是对象,则会自动将其转为对象,再将其属性罗列出来

console.log({...1}); // {}
console.log({...undefined}); // {}
console.log({...null}); // {}
console.log({...true}); // {}
// 以上都是自动通过new Object的方式转化为对象了,但是因为对象中没有属性值,所以展开后都是空对象

// 字符串例外,会自动转成一个类似数组的对象
console.log({...'String'}); // {0: "S", 1: "t", 2: "r", 3: "i", 4: "n", 5: "g"}

对象中对象属性的展开

直接说结论:不会展开对象中的对象属性

const apple = {
	feature: {
		taste: 'sweet'
	}
};
const pen = {
	feature: {
		color: 'black',
		shape: 'cylinder'
	},
	used: 'write'
};
console.log({...apple}); // {feature: {…}}
console.log({...pen}); // {feature: {…}, used: "write"}

应用

复制对象

const a = {x: 1, y: 2};
// const b = a 这种方法是错误的,引用类型不能用这种方法来复制
// 正确方法:
const b = {...a};
console.log(b); // {x: 1, y: 2}
console.log(b === a); // false

注意: 使用展开运算符来复制对象并不是深拷贝,如果对象中还有嵌套对象的话改变 a 对象某个属性,b 对象相应那个属性值也会发生变化。可以自己动手试一试

用户参数和默认参数

const logUser = userParam => {
	const defaultParam = {
		username: 'Jae',
		age: 22,
		sex: 'male'
	}
};
const param = {...defaultParam, ...userParam}
// userParam放在后面,这样用户没有传参的时候就是用defaultParam,有传的时候使用userParam

最后

以上就是精明黄豆为你收集整理的ES6 对象展开运算符的全部内容,希望文章能够帮你解决ES6 对象展开运算符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部