ES6——对象解构赋值

const {student:name} = {student:"法外狂徒"}
console.log(student)
console.log(name)

A: 法外狂徒
B: name
C: undefined
D: ReferenceError

对象的结构赋值是以下形式的简写:

var {student:name, age:num} = {student:"小明", age:18}

也就是说,对象的结构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者

上面的代码中,真正被赋值的是变量name,而不是模式student

结构赋值的变量都会重新声明

let student;
let {student} = {student:1};  // SyntaxError: Duplicate declaration "student"

注意,采用这种写法时,变量的声明和赋值是一体的。对于let和const而言,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错

    let student;
    ({student} = {student: 1}); // 成功

因为var命令允许重新声明,所以这个错误只会再使用let和const命令出现。如果没有第二个let命令,代码就不会报错


    var {x = 3} = {};
    x // 3
    
    var {x, y = 5} = {x: 1};
    x // 1
    y // 5
    
    var { message: msg = "Something went wrong" } = {};
    msg // "Something went wrong"

对象的解构也可以指定默认值

    var {x = 3} = {x: undefined};
    x // 3
    
    var {x = 3} = {x: null};
    x // null

上面的代码中,如果x属性等于null,就不严格等于undefined,导致默认值不会生效

    var {foo} = {bar: 'baz'}
    foo // undefined

如果解构失败,变量的值等于undefined

    // 报错
    var {foo: {bar}} = {baz: 'baz'}
    如果解构模式

如果解构模式是嵌套对象,而且子对象所在的父属性不存在,那么将会报错
上面代码中,等号左边对象的foo属性对应一个子对象。该子对象的bar属性解构时会报错。原因很简单,因为foo这是等于undefined,再取子属性就会报错

    // 错误的写法                                      //正确的写法
    
    var x;
    {x} = {x: 1};                                      ({x} = {x:1})
    // SyntaxError: syntax error

如果将一个已经声明的变量用于解构赋值,必须非常小心
上面的代码写法会报错,因为JavaScript引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免JavaScript将其解释为代码块,才能解决这个问题

    ({} = [true, false]);
    ({} = 'abc');
    ({} = []);

解构赋值允许等号左边的模式中不放置任何变量名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值