经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
es6 快速入门 系列 —— 解构
来源:cnblogs  作者:彭加李  时间:2021/3/8 11:51:13  对本文有异议

其他章节请看:

es6 快速入门 系列

解构

我们经常使用数组或对象存储数据,然后从中提取出相关数据信息

试图解决的问题

以前开发者为了从对象或数组中提取出特定数据并赋值给变量,编写了很多重复的代码,就像这样:

  1. function demo1(obj){
  2. let key1 = obj.key1
  3. let key2 = obj.key2
  4. let key3 = obj.key3
  5. let key4 = obj.key4
  6. // 使用key1,key2,key3,key4变量,做进一步操作
  7. }
  8. demo1({
  9. key1: 'value1',
  10. key2: 'value2',
  11. key3: 'value3',
  12. key4: 'value4'
  13. })

解决的方法

es6引入新特性:解构。来解决上面的问题,请看下面:

  1. function demo1({key1, key2, key3, key4}){
  2. console.log(key2) // value2
  3. // 使用key1,key2,key3,key4变量,做进一步操作
  4. }
  5. demo1({
  6. key1: 'value1',
  7. key2: 'value2',
  8. key3: 'value3',
  9. key4: 'value4'
  10. })

可以把解构简单理解成赋值

更详细的介绍请看下面补充部分

补充

对象解构

对象解构的语法:在赋值操作符左边放置一个对象字面量

声明变量时使用解构
  1. let obj = {
  2. key1: 'value1',
  3. key2: 'value2'
  4. }
  5. let {key1, key2} = obj
  6. console.log(key1) // value1

不要忘记初始化

  1. // 语法错误
  2. var {key1, key2}
  3. // 语法错误
  4. let {key1, key2}
变量赋值时使用解构
  1. let obj = {
  2. key1: 'value1',
  3. key2: 'value2'
  4. }
  5. let key1 = '11';
  6. // 一定要用小括号包裹赋值语句。否则js引擎将{}是为代码块,而代码块不允许出现在赋值语句的左侧
  7. ({key1} = obj)
  8. console.log(key1) // value1
解构时的默认值
  1. let obj = {
  2. key1: 'value1',
  3. key2: 'value2',
  4. key5: undefined
  5. }
  6. let {key1, key2, key3, key4 = 'value4', key5 = 'value5'} = obj
  7. console.log(key2) // value2
  8. console.log(key3) // undefined 该变量名在obj中不存在,则赋值undefined
  9. console.log(key4) // value4 对应的属性不存在,使用默认值
  10. console.log(key5) // value5 对应属性值为undefined,使用默认值
非同名变量赋值
  1. let obj = {
  2. key1: 'value1'
  3. }
  4. let {key1: v1, key2: v2 = 'value5'} = obj
  5. console.log(v1) // value1
  6. console.log(v2) // value5
嵌套对象的解构
  1. let obj = {
  2. loc: {
  3. key1: 'value1',
  4. }
  5. }
  6. let {loc: {key1, key2, key3 = 'value3'}} = obj;
  7. console.log(key1) // value1
  8. console.log(key2) // undefined
  9. console.log(key3) // value3

数组解构

数组解构语法:与对象解构语法相比要简单多了,使用的是数组字面量

声明变量时使用解构
  1. let arr = ['value1', 'value2', 'value3', 'value4', 'value5']
  2. let [,,key3,key4,key5] = arr
  3. console.log(key3) // value3 逗号是占位符
  4. console.log(key5) // value5

不要忘记初始化

  1. // 语法错误
  2. let [,,key3,key4,key5]
变量赋值时使用解构

不需要用小括号包裹表达式,这一点与对象解构不同

  1. let arr = ['value1', 'value2']
  2. let key1, key2;
  3. [key1, key2] = arr
  4. console.log(key1) // value1

数组解构有一个独特用法:交换两个变量的值

  1. let key1 = 'value1';
  2. let key2 = 'value2';
  3. [key1, key2] = [key2, key1];
  4. console.log(key1) // value2
  5. console.log(key2) // value1
解构时的默认值
  1. let arr = ['value1']
  2. let [key1, key2 = 'value2'] = arr
  3. console.log(key2) // value2
嵌套数组的解构
  1. let arr = ['value1', ['value2', 'value3'], 'value4']
  2. let [key1,[key2],key4] = arr
  3. console.log(key2) // value2
  4. console.log(key4) // value4
不定元素

前面我们介绍了不定参数,而在数组解构语法中有一个与之类似的概念:不定元素。在数组中,可以通过三个点(...)的语法将数组中的其余元素赋值给一个特定的变量,就像这样:

  1. let arr = ['value1', 'value2', 'value3', 'value4']
  2. let [key1, ...restKeys] = arr
  3. console.log(key1) // value1
  4. console.log(restKeys.length) // 3
  5. console.log(restKeys[0]) // value2

:与不定参数一样,不定元素也必须是最后一个

可以使用不定元素克隆数组

  1. let arr = ['value1', 'value2']
  2. let [...copy] = arr
  3. console.log(Array.isArray(copy)) // true
  4. console.log(copy[1]) // value2

解构参数

解构参数必须传值

  1. function demo(key1, {key2, key3}){
  2. console.log(key2) // value2
  3. }
  4. // 正确
  5. demo('value1', {key2: 'value2'})
  6. // 报错
  7. demo('value1')

当调用 demo('value1') 时,js引擎实际上做了这些事:

  1. function demo(key1, options){
  2. let {key2, key3} = options
  3. }

如果需要让解构参数可选,必须为其提供默认值

  1. function demo(key1, {key2, key3} = {}){
  2. console.log(key2) // undefined
  3. }
  4. // 正确
  5. demo('value1')

下面这种写法,让解构参数支持可选,并且能提供默认值:

  1. function demo(key1, {key2 = 'value2', key3 = 'value3'} = {}){
  2. console.log(key2)
  3. }
  4. demo('value1') // value2 解构参数支持可选
  5. demo('value1', {}) // value2
  6. demo('value1', {key2: 'value20'}) // value20
  7. demo('value1', {key3: 'value30'}) // value2

其他章节请看:

es6 快速入门 系列

原文链接:http://www.cnblogs.com/pengjiali/p/14471024.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号