举个栗子:foo函数有个默认的输出,如果传了obj参数,有相同属性则属性被实参覆盖
第一种写法
var obj = {
age:23
}
function foo(obj){
//默认对象及其属性
var obj1 = {
name:"zhangsan",
age:19
}
//使用展开运算符合并默认对象和传入对象,传入对象在后,根据属性唯一性,进行相同属性,值覆盖
var newObj = {
...obj1,
...obj
}
console.log(newObj.name,newObj.age)
}
foo()//zhangsan 19
foo(obj)//zhangsan 23
复制代码
看看有没有更简单的写法
function foo(obj={
name:"zhangsan",
age:19
}){
console.log(obj.name,obj.age)
}
foo()//zhangsan 19
foo(obj)//undefined 23
复制代码
给传递的参数一个默认的对象,在不传参的情况下确实满足需求,但是,传了不完整的对象,则没有传入的属性就为undefined了,此处不满足要求
更好的解决方式:
function foo({
name="zhangsan",
age=19
}={}){
console.log(name,age)
}
复制代码
{name=”zhangsan”,age=19}={},使用参数解构的方法,前一个{}将对象的属性解构出来,并给予默认值;后一个{}的由来:如果foo不传参数,即foo(),由于让解构undefined,会报错,因此需要整体给一个空对象的默认值,即如果不传参,则默认传入的为空对象,之后对空对象解构name和age,没有获取到,则使用默认值。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END