老师解构赋值之后为什么有时候能直接输出属性有时候必须输出值
// 对象的解构赋值: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打点调用 不能直接用
16
收起
正在回答 回答被采纳积分+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" };
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者,即:
所以,当变量名与属性名不一样的时候,获取属性值,必须写变量名,而不能写属性名。这是ES6对象解构赋值的内部机制,需要大家进行特殊记忆。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星