Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wangbinze opened this issue Mar 9, 2021 · 1 comment

Comments

@wangbinze
Copy link
Owner

wangbinze commented Mar 9, 2021

题目:JavaScript、说说对象结构

@wangbinze wangbinze changed the title ❤️❤️❤️Question026 -JavaScript、ES6中新增了哪些对象比较强的对象语法? ❤️❤️❤️Question026 -JavaScript、JavaScript、说说对象结构 Mar 9, 2021
@wangbinze wangbinze changed the title ❤️❤️❤️Question026 -JavaScript、JavaScript、说说对象结构 ❤️❤️❤️Question026 -JavaScript、JavaScript、说说对象解构 Mar 9, 2021
@wangbinze
Copy link
Owner Author

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

// 使用对象解构
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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant