ES6新增语法 对象解构

简介: ECMAScript6引入的对象解构语法允许在一行代码中完成多个赋值操作。例如,从一个包含姓名和年龄的对象中提取属性,传统方法需分别获取,而使用解构赋值可简洁实现相同功能。此外,它支持为未定义的属性设置默认值、对已声明变量的解构赋值(需加括号)、嵌套解构以及在函数参数中直接解构等特性,极大提升了代码的可读性和编写效率。

介绍

ECMAScript6新增了对象解构语法,可以在一条语句中使用嵌套数据实现一个或者多个赋值操作,
简单的说,对象解构就是使用了与对象匹配的解构来实现对象属性赋值

简单使用

下面是不使用对象解构写的代码

let person = {
   
   name:"张三",age:21}
let personName = person.name
let personAge = person.age
console.log(personName) // 张三
console.log(personAge) // 21

再用对象解构的语法来实现一下

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,age:PersonAge} = person
console.log(PersonName,PersonAge) // 张三,21

两者实现的功能一样,但明显对象解构的方式更加方便,简洁

1. 解构源对象不存在的属性,会打印成来undefined

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,job:PersonAge} = person
console.log(PersonName,PersonAge) // undefined

2. 在解构赋值的同时可以定义默认值,这就有效解决了前面的源对象未定义该 属性的问题

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,job="WebKaiFa"} = person
console.log(PersonName,job) // 张三 WebKaiFa

3. 解构并不要求变量必须在结构表达式中声明,不过,如果给事先声明的 变量 赋值,则赋值表达式必须包含在一对括号当中

如果不加括号的的情况(报错)

let personName,personAge;
let person = {
   
   name:"张三",age:21};
{
   
   name:personName,age:personAge} = person;
console.log(personName,personAge);
//  Uncaught SyntaxError: Unexpected token ':'

加了括号(正常输出)

let personName,personAge;
let person = {
   
   name:"张三",age:21};
({
   
   name:personName,age:personAge} = person)
console.log(personName,personAge); // 张三 21

4. 嵌套解构

let person = {
   
   name:"张三",age:21,job:{
   
   
    name:"WebKaiFa"
}};
let personCopy = {
   
   };
// 解构源对象 赋值给personCopy空对象
({
   
   name:personCopy.name,age:personCopy.age,job:personCopy.job} = person)
console.log(personCopy);

20.jpg

因为一个对象的引用被赋值给personCopy空对象,所以修改源对象的属性值,personCopy的值也会对应的发生改变,

5.在外层属性没有定义的情况不能使用嵌套解构,无论源对象还有目标对象都是 一样的

显示undefined

let person = {
   
   name:"张三",age:21,job:{
   
   
    name:"WebKaiFa"
}};
let personCopy = {
   
   };
// 解构源对象 赋值给personCopy空对象
({
   
   address:personCopy.address} = person)
console.log(personCopy); // {address: undefined}

报错:因为address在源对象上找不到该属性

let person = {
   
   name:"张三",age:21,job:{
   
   
    name:"WebKaiFa"
}};
let personCopy = {
   
   };
// 解构源对象 赋值给personCopy空对象
({
   
   address:{
   
   
    p:personCopy.address
}} = person)
console.log(personCopy);
// 报错:Uncaught TypeError: Cannot read properties of undefined (reading 'p')

6. 参考上下文匹配

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

let person = {
   
   name:"张三",age:21}
function PrintPerson(foo,{
   
   name,age},bat){
   
   
    console.log(arguments);
    console.log(name,age) //  张三 21
}
PrintPerson('star',person,'end')
// Arguments(3) ['star', {…}, 'end', callee: (...), Symbol(Symbol.iterator): ƒ]0: "star"1: {name: '张三', age: 21}age: 21name: "张三"[[Prototype]]: Object2:

7. 总结一下

ES6对象解构语法的优点和好处有以下几点:

  • 可以方便地从对象中提取属性值,不需要使用点运算符或中括号。
  • 可以给变量赋予默认值,避免undefined或null的情况。
  • 可以使用别名,给变量取一个与对象属性名不同的名字。
  • 可以嵌套解构,从对象的深层属性中提取值。
  • 可以与函数参数结合,简化函数的定义和调用。
目录
相关文章
|
JSON 资源调度 JavaScript
vue使用vue-json-viewer展示JSON数据步骤
vue使用vue-json-viewer展示JSON数据步骤
vue使用vue-json-viewer展示JSON数据步骤
|
1天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1435 1
|
8天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1409 10
|
9天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1295 6
|
9天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1159 14
|
3天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
422 118
|
2天前
|
机器学习/深度学习 测试技术 数据中心
九坤量化开源IQuest-Coder-V1,代码大模型进入“流式”训练时代
2026年首日,九坤创始团队成立的至知创新研究院开源IQuest-Coder-V1系列代码大模型,涵盖7B至40B参数,支持128K上下文与GQA架构,提供Base、Instruct、Thinking及Loop版本。采用创新Code-Flow训练范式,模拟代码演化全过程,提升复杂任务推理能力,在SWE-Bench、LiveCodeBench等基准领先。全阶段checkpoint开放,支持本地部署与微调,助力研究与应用落地。
304 1
|
6天前
|
存储 缓存 NoSQL
阿里云经济型e实例(ecs.e-c1m4.large)2核8G云服务器优惠活动价格及性能测评
阿里云经济型e实例(ecs.e-c1m4.large)2核8G配置,支持按使用流量或按固定带宽两种公网计费方式,搭配20G起ESSD Entry云盘,是主打高性价比的内存优化型入门选择。其核心特点是8G大内存适配轻量内存密集场景,计费模式灵活可控,既能满足个人开发者的复杂测试项目需求,也能支撑小微企业的基础业务运行,无需为闲置资源过度付费。以下从优惠活动价格、性能表现、适用场景及避坑要点四方面,用通俗语言详细解析。
229 153

热门文章

最新文章