老师解构赋值之后为什么有时候能直接输出属性有时候必须输出值

老师解构赋值之后为什么有时候能直接输出属性有时候必须输出值

        // 对象的解构赋值:1.结构相同{}={}  2.属性名对应
        const { age, username } = { username: 'Alex', age: 18 };
           // 老师这里的console.log为什么可以直接写属性的名字就能输出值
        console.log(age,username);  // 18 'Alex'

        const { age1:user1, username1:a1 } = { username1: 'Alex', age1: 18 };
        console.log(user1, a1);  // 18 'Alex' 
        //  老师!下面这里写属性的名字就会报错  
        //console.log(username1, age1);  //Uncaught ReferenceError: username1 is not defined 属性只能obj打点调用 不能直接用


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
卡布琦诺 2022-05-16 11:34:21

同学你好,在ES6的解构赋值中,有一个不成文的规定,即:

(1)变量必须与属性同名,才能取到正确的值(代码如下):

const { age, username } = { username: 'Alex', age: 18 };
console.log(age, username); // 18 'Alex'

(2)如果变量名与属性名不一致,必须按照如下形式书写:

const { age1: user1, username1: a1 } = { username1: 'Alex', age1: 18 };
console.log(user1, a1); // 18 'Alex'

简单的给同学分析一下原理:

结合上述两端代码,推断出,实际上,对象的解构赋值是下面形式的简写:

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };

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

https://img1.sycdn.imooc.com//climg/628379e40979042d14160307.jpg

所以,当变量名与属性名不一样的时候,获取属性值,必须写变量名,而不能写属性名。这是ES6对象解构赋值的内部机制,需要大家进行特殊记忆。

祝学习愉快!

  • 提问者 WYW265672 #1

    老师理解了 但是最后您写错了把 应该是 ‘当变量名与属性名不一样的时候,获取属性值,必须写变量名,而不能写属性名’吧,您说被赋值的是变量

    2022-05-17 17:55:55
  • 卡布琦诺 回复 提问者 WYW265672 #2

    同学你好,老师的疏忽,是写反了,你的理解是正确的,祝学习愉快!

    2022-05-17 18:29:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师