《深入理解ES6》第五章 解构

第五章 解构

《深入理解ES6》—— Nicholas C. Zakas

1. 析构的用处

在ES6之前,从对象或数组中获取信息,并将特定数据存入本地变量,
需要书写许多相似的代码:

let options = {
    repeat: true,
    save: false
}

// 从对象中提取数据
let repeat = options.repeat,
    save = options.save;

此段代码提取了 options 对象的属性,并将其存在同名的本地变量上。
虽然简单,但如果有大量的属性要处理,则需要逐个为其赋值;
若数据嵌套很深,则还需要遍历。

这就是ES6为何要给对象与数组添加解构。
当把数据结构分解为更小的部分时,从中提取你要的数据会变得容易许多。

2. 对象解构

2.1. 语法

// 解构赋值表达式
对象字面量 = 初始化器

解构赋值表达式 的值为 初始化器的值。

对象字面量的属性标识符:既声明了本地变量,也读取了对象的相应属性值。

2.2. 解构赋值

声明的同时进行初始化赋值:

let person = {
    name: "吴钦飞",
    gender: "男"
}
let { name, gender } = person;
name; //=> "吴钦飞"

改变变量的值:

let person = {
    //name: "吴钦飞",
    gender: "男"
},
name = "张三",
gender = "未知";

// 如果不用小括号包裹解构表达式,花括号部分会当成代码块
( { name, gender } = person );
name; //=> undefined

在使用解构赋值时,如果指定的本地变量在对象中没有找到同名属性,
则赋值undefined,会覆盖该变量原本的值。

2.3. 默认值

可以在对象字面量中指定默认值,
在本地变量找不到对应的属性或对应属性值为undefined时,才会使用默认值。

let person = {
    //name: "吴钦飞",
    gender: "男"
},
name = "张三",
gender = "未知";

// 如果不用小括号包裹解构表达式,花括号部分会当成代码块
( { name = "帅哥", gender } = person );
name; //=> "帅哥"

2.4. 属性与变量不同名

let person = {
    name: "吴钦飞",
    gender: "男"
};
// 别名,默认值
let { name: myName, gender: myGender = "男" } = person;
myName; //=> 吴钦飞

2.5. 嵌套的对象解构

深入到嵌套的对象结构中去提取数据。

冒号左侧的标识符 代表 需要检查的位置,
冒号右侧是赋值的目标;
当冒号右侧存在花括号时,表示目标被嵌套在对象的更深一层。

let person = {
    name: "吴钦飞",
    loc: {
        province: {
            code: "42",
            name: "湖北"
        }
    }
};

let { 
    loc: { 
        province: {
            name
        } 
    } 
} = person;

name; //=> 湖北

3. 数组解构

3.1. 语法

数组字面量 = 初始化器

解构作用在数组内部的位置上。

let colors = [ "0_red", "1_green", "2_blue" ];

let [ firstColor, secondColor ] = colors;
firstColor; //=> "0_red"
secondColor; //=> "1_green"

// 忽略一些值
let [ , , thirdColor ] = colors;
thirdColor; //=> "2_blue"

3.2. 互换变量值

let person = "张三";
let animal = "狗";

[ person, animal ] = [ animal, person ];
person; //=> "狗"

3.3. 默认值

let colors = [ "0_red" ];

let [ firstColor, secondColor = "1_green" ] = colors;
secondColor; //=> "1_green"

3.4. 嵌套

let colors = [ "0_red", [ "1_0_green" ], "2_blue" ];

let [ firstColor, [ secondColor ] ] = colors;
secondColor; //=> "1_0_green"

3.5. 剩余项

let colors = [ "0_red", "1_green", "2_blue" ];

let [ firstColor, ...restColors ] = colors;
restColors; //=>  ["1_green", "2_blue"]

// 克隆数组
let es5ClonedColors = colors.concat();
let [...es6ClonedColors] = colors;

4. 混合解构

用于从JSON配置解构中抽取数据。

let config = {
    entry:{ 
        main:"./src/main.js"
    },
    module:{
        rules:[      
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ["env"],
                        plugins: ["transform-runtime"]
                    }
                }
            }
        ]
    }
};

let {
    entry: { main },
    module: {
        rules:[
            {
                use: {
                    options: {
                        presets: [ preset ]
                    }
                }
            }
        ]
    }
} = config;

main; //=> "./src/main.js"
preset; //=> "env"

5. 参数解构

5.1. 说明

当给函数传递大量可选参数时,以前,使用 options

function setCookie( name, value, options ) {
    let 
        path = options.path,
        domain = options.domain,
        expires = options.expires
    ;
    // ......
}

setCookie( "type", "js", {
    expires: 60000
} );

无法仅通过查看函数定义就判断出函数所期望的输入,使用解构:

function setCookie( name, value, { path, domain } ) {
    // ......
}

5.2. 解构的参数是必传参数

解构参数实际上是解构声明的简写:

function setCookie( name, value, options ) { 
    let { domain, expires } = options;
}

一旦 optionsundefined,就会报错,可以使用函数的参数提供默认值:

function setCookie( name, value, { domain, expires } = {} ) { 
    // ...... 
}

5.3. 解构参数的默认值

function setCookie( name, value, 
    { 
        domain = "baidu.com", 
        expires = 100000
    
    } = {} 
) { 
    // ...... 
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ES6是ECMAScript 2015的简称,是JavaScript的一个重要的更新版本。深入理解ES6 PDF是一本通过深入研究ES6标准来理解其中各种语法和特性的书籍。 这本书分为十八章,从ES6的基础语法和新特性入手,详细讲解了ES6的语法、语义和使用方法。其中包括了箭头函数、简化的对象字面量、模板字面量、解析器、新的控制结构、类和继承、生成器和迭代器、异步操作、Symbol和迭代器、集合和迭代器、Map和Set、新的数组方法、Promise和异步操作、代理和反射、模块化和导入机制,每一章都是围绕特定的内容展开细致的解读。 对于学习ES6的开发者来说,这本书是一份非常有价值的资料。读者可以从中深入了解ES6的语言架构和语法规范,更加深入地理解JavaScript的基础和高级语言特性。对于从ES5升级到ES6的开发者来说,该书是学习ES6语言的最佳手册,还可以通过实例代码快速掌握ES6的语言特性。 总之,深入理解ES6 PDF是一本非常专业且详细的技术书籍,可以帮助读者深入了解ES6语言特性,并掌握新的编程技巧。 ### 回答2: ES6Javascript的下一代语言标准,它引入了许多新的语法、特性和API,使得编程变得更加简单、高效、灵活和快捷。深入理解ES6 PDF是一本ES6入门指南,它帮助读者系统地学习ES6的核心知识和技能,了解ES6的语法、模块、类、迭代器、生成器、Promise等核心概念及其实践应用。 阅读深入理解ES6 PDF,首先需要了解ES6的基本语法和新特性,包括箭头函数、模板字符串、解构赋值、默认参数、rest参数等。其次,需要学习ES6的模块化设计,了解如何实现模块导出、导入、依赖管理等功能,以便更好地组织代码和提高代码的复用性。另外,深入理解ES6 PDF也介绍了ES6的面向对象编程特性,包括类的声明、方法的定义、继承、多态等,以及ES6的迭代器、生成器、Promise等核心概念及其实践应用,使得读者可以更加深入地掌握ES6的精髓和应用。 综上所述,深入理解ES6 PDF是一本非常好的ES6入门指南,它帮助读者了解ES6的核心知识和技能,带领读者建立ES6的编程思想和风格,以便更好地应对现代Web应用开发的挑战,同时也是学习ES6语言的必备指南。 ### 回答3: 《深入理解ES6》是一本详细介绍ES6新特性的书籍。它主要介绍了模板字符串、解构赋值、箭头函数、类、模块化开发等ES6的新语法。通过深入阅读这本书,能够更好地理解和运用ES6的新特性。 其中,模板字符串是ES6引入的一个非常重要的新特性,它可以让我们更方便地处理字符串拼接和换行,同时还支持常用的字符串操作方法。 解构赋值则是ES6中的另一个重要特性,它可以让我们更快捷地从一个对象或数组中提取出需要的值,这对于提高代码的可读性和复用性都非常有帮助。 箭头函数是ES6中的又一个新特性,它可以让我们更愉悦地编写函数,并且它的this指向也更加方便和易懂。同时也是优化了ES5语言中函数语法臃肿和拖沓的问题。 类是ES6中一个重要的新特性,它可以让我们更加方便地实现面向对象编程,这是在ES5中较为繁琐的过程,同时也减少了ES5类的一些使用致命局限。 最后,模块化开发也是ES6中的一个重要特性,它可以让我们更加方便地组织和管理代码,同时也减少了代码间的相互污染,使得代码更加易于维护和扩展。 总之,《深入理解ES6》这本书为我们深入了解ES6的新特性提供了很好的指导和方向,并且还有配套的演示代码,非常值得一读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值