tnblog
首页
视频
资源
登录

ES6 新增特性 解构赋值

5622人阅读 2020/6/24 16:44 总访问:120211 评论:0 收藏:0 手机
分类: ES6

ES6 中数据解构赋值

在 ES6 中通过使用解构赋值代码可以方便时使我们快速的上手代码的实现方式

· 数组的解构:

有一下的代码块:

  1. let arr = [1, 2, 3]

现在要求取出数组的每一项

  1. // 传统的方式
  2. let a = arr[0]
  3. let b = arr[1]
  4. let c = arr[2]
  5. console.log(a, b, c) // 1, 2, 3

在 ES6 中提供了 解构 的语法 可以得到数组中的某一项, 如:

  1. let [a, b, c] = [1, 2, 3]
  2. console.log(a, b, c) // 1, 2, 3

结构赋值就是将数组中的某一项按照指定的顺序结构赋值给左边的变量 等于号的左右两边都应该是一个数组才可以 两边的值都应该一一对应

  1. let [a, b, c] = [1, 3, [3, 4]]
  2. // 通过解构赋值的一一对应的原则
  3. console.log(1, 3, [3, 4])
  1. let [a, b, c, d] = [1, 2, [3, 4]]
  2. // 通过解构赋值的一一对应结果
  3. console.log(a, b, c, d) // 1 2 [3, 4] undefined

通过上一段代码输出可知 这里的 a, b, c 都有与之对应的值匹配 而 d 没有对应的值匹配 为 undefined 如何解决这个 undefined 的问题呢??

通过在解构的时候设置默认的初始值

  1. let [a, b, c, d = 5] = [1, 2, [3, 4]]
  2. console.log(a, b, c, d) // 1, 2, [3, 4], 5

解构赋值是一种惰性的 如果有传值 就以传递的值为准 如果没有就是用默认值 如果连默认值都没有那就是 undefined

难度提升 => 如何将一下的数组全部展开??
以上要求我们可以通过 数据的解构赋值配合扩展运算符实现

  1. let [a, b, ...c] = [1, 2, [3, 4]]
  2. // 注意 这里的 c 输出的值为 [3, 4] 通过扩展运算符的形式即可展开数组

· 对象的解构:

有一个对象:

  1. let user = {
  2. name: 'xiaojianjian',
  3. age: 18,
  4. }

传统获取 name 和 age 的方式

  1. let name = user.name
  2. let age = user.age
  3. console.log(name, age) // xiaojianjian 18

es6 中结构赋值的方式

  1. let { name, age } = user
  2. console.log(name, age) // xiaojianjian 18

解构时顺序的调换是否正常

  1. let { age, name } = user
  2. console.log(age, name) // 18, xiaojianjian
  3. // 输出的结果可知 解构与顺序没有关系

解构时不想使用原来的属性名称 >>> 如何更换

  1. let { age, name: userName } = user
  2. console.log(age, name) // 报错
  3. console.log(age, userName) // 18, xiaojianjian
  4. // 通过以上的代码可知 在解构变量时候 通过给变量起别名的方式即可将解构的值赋值给新变量名

字符串的解构赋值
字符串如何解构 <=> 如何字符串中的每个字符

传统的方式

  1. let str = 'xiaojianjian'
  2. for(let i = 0; i < str.length; i++) {
  3. console.log(str[i]) // x i a o j i a n...
  4. }

ES6 中对字符的解构就如同对数组的解构 两种解构的方式是一样的

  1. let str = 'xiaojianjian'
  2. let [a, b, c, d] = str
  3. console.log(a, b, c, d) // x, i, a, o

开发场景
设置默认值在代码中增强防御式代码

对象解构默认值

  1. let { name:'liuxiaojian', age: 18 } = {
  2. name: 'xiaojianjian',
  3. age: 20,
  4. }
  5. console.log(name, age) //正常情况下 xiaojianjian 20
  6. console.log(name, age) // 非正常情况下取默认值 liuxiaojian 18

数组解构默认值

  1. let [a = 3, b = 4] = [1 ,2]
  2. console.log(a, b) //正常情况下 1, 2
  3. console.log(name, age) // 非正常情况下取默认值 3 4

以上的代码段中不难看出 数组解构默认值 通过 赋值号 “ = “ 对象默认的赋值号 “ : “

评价

ES6 数组的新增方法

数组的扩展 类数组 / 伪数组Array.from()Array.of()copyWithin()fill()includes() 类数组 / 伪数组: 什么是类数组或...

js与ES6中基本语法异同比较

前端刷副本日记chapter1!!js中和ES6中声明变量的区别://js中value在声明之前可以使用value=&quot;黄大仙&quot;;varvalue...

ES6中一些常用基本函数的使用

前端刷副本日记chapter2!!ES6中一些常用基本函数的使用//按条件筛选数组中指定的值//varresult=[];//varsports=[&quot;篮...

ES6新增的字符串方法

String.fromCodePoint()String.raw()实例方法:codePointAt()实例方法:normalize()实例方法:includes(), startsWith(), e...

ES6 Reflect

概述Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。(1) 将Objec...

ES6 Module 的语法介绍

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他...

ES6块级作用域

为什么需要块级作用域?ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景,内层变量...

js,ES6在集合中排除某些数据。js判断集合中是否存在某个值

js判断集合中是否存在某个值利用indexOf就可以了,在集合中可以使用indexOf找某个值,如果找不到就返回-1 const noDataLes...
大概你身上总有我喜欢的味道,所以我一见你就开心的笑
排名
30
文章
18
粉丝
6
评论
11
vs code 插件安装推荐
修心 : 背景的妹子好评啊!
如何完全干净的卸载 vs code编辑器
剑轩 : vs code插件这么顽强的么
广告终结插件推荐
剑轩 : 我好像也是用的这个
windoes 强力下载工具Internet Download Manager
饰心 : 线程不要开多了 开多了要遭网站拉黑
推荐一款三无压缩软件:bandizip
瑾语 : 用过 感觉没rar好用
修改电脑的鼠标指针样式
剑轩 : 挺喜欢你这个个性签名的
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
希望你今后的每一次笑,都是真心的。