wangbinze / Daily---3and1

0 stars 0 forks source link

❤️❤️❤️Question026 -JavaScript、JavaScript、说说对象解构 #26

Open wangbinze opened 3 years ago

wangbinze commented 3 years ago

题目:JavaScript、说说对象结构

wangbinze commented 3 years ago

在一条语句中使用嵌套数据实现一个或多个赋值操作。对象解构就是使用与对象匹配的结构来实现对象属性赋值。

// 使用对象解构
let person = { 
  name: 'Matt', 
  age: 27 
}; 
let { name: personName, age: personAge } = person;
console.log(personName); // Matt 
console.log(personAge); // 27
// or
// 让变量直接使用属性的名称
let { name, age } = person;
console.log(name); // Matt 
console.log(age); // 27

解构赋值不一定与对象的属性匹配。赋值的时候可以忽略某些属性,而如果引用的属性不存在,则 该变量的值就是 undefined。

解构在内部使用函数 ToObject()(不能在运行时环境中直接访问)把源数据结构转换为对象。这意味着在对象解构的上下文中,原始值会被当成对象。这也意味着(根据 ToObject()的定义),null和 undefined 不能被解构,否则会抛出错误。

// 先声明变量的写法
// 如果是给事先声明的变量赋值,则赋值表达式必须包含在一对括号中:
let personName, personAge; 
let person = { 
  name: 'Matt', 
  age: 27 
}; 
({name: personName, age: personAge} = person); 
console.log(personName, personAge); // Matt, 27

嵌套解构

解构对于引用嵌套的属性或赋值目标没有限制。

部分解构

参数上下文匹配

在函数参数列表中也可以进行解构赋值。对参数的解构赋值不会影响 arguments 对象,但可以在函数签名中声明在函数体内使用局部变量。

let person = { 
  name: 'Matt', 
  age: 27 
}; 
function printPerson(foo, {name, age}, bar) { 
  console.log(arguments); 
  console.log(name, age); 
} 
function printPerson2(foo, {name: personName, age: personAge}, bar) { 
  console.log(arguments); 
  console.log(personName, personAge); 
} 
printPerson('1st', person, '2nd'); 
// ['1st', { name: 'Matt', age: 27 }, '2nd'] 
// 'Matt', 27 
printPerson2('1st', person, '2nd'); 
// ['1st', { name: 'Matt', age: 27 }, '2nd'] 
// 'Matt', 27