JS-参数解构

举个栗子: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
喜欢就支持一下吧
点赞0 分享