前言:变量的解构赋值基础用法点击这里

一、数组的解构赋值注意点

1、不完全解构,即等号左边的模式只匹配一部分的等号右边的数组。

let [x,y]=[1,2,3];
x//1
y//2let [a,[b],d]=[1,[2,3],4];
a //1
b //2
d //4

2、惰性求值,即只有在用到时才会求值。

function f(){console.log('aaa');
}
let [x=f()]=[1];
//只有触发underfind时才会执行函数f();

3、变量未定义。

let [x=y,y=1]=[];//ReferenceError
//原因:在进行x=y时,y未定义
let [x=1,y=x]=[];//x=1 y=1

4、数组嵌套赋值(模式匹配)

let [foo,[ [bar],baz ] ]=[1,[ [2],3 ] ];
foo //1
bar //2
baz //3

5、对数组进行对象属性的解构

let arr=[1,2,3];
let {0:first,[arr.lebgth-1]:last}=arr;
first //1
last //3

6、数组可以解构的前提(被解构的对象具备Iterator接口)

二、对象的解构赋值注意点

1、变量必须与属性同名,如果不同名时应该改写为:

var {foo:baz}={foo:'aaa',bar:'bbb'}
baz //"aaa"

由此可以看出:对象的解构赋值的内部机制时是先找到同名属性,然后再赋值给对应变量。真正被赋值的是后者,而不是前者(模式匹配)。

2、嵌套赋值

let obj={p:['Hello',{y:'world'}]
};
let { p: [x,{y}]}=obj;
x //Hello
y //world//p是模式匹配,不被赋值

3、将一个已经声明的变量用于解构赋值时,需要小心。

//错误写法
let x;
{x}={x:1} //报错 SyntaxError:syntax error//原因:javascript引擎会将{x}理解为一个代码块,从而导致语法错误
//解决方法
let x;
({x}={x:1});

三、数值和布尔值的解构赋值注意点

解构赋值,如果等号右边是数值和布尔值,则会先转为对象

let {toString:s}=123;
s=== Number.prototype.toString;//truelet {toString :s}=true;
s===Boolean.prototype.toString; //true//因为数值和布尔值的包装对象都有toString属性,因此变量s都能取到值let{prop:x}=underfind;//TypeError
let{prop:x}=null;//TypeError

四、函数参数的解构赋值注意点

例子一:为x y指定默认值

function move({x=0,y=0}={}){return [x,y];
}
move({x:3,y:8}); //[3,8]
move({x:3}); //[3,0]
move({}); //[0,0]  参数为空对象,此时x,y的值为underfind,触发默认值
move();   //[0,0]  参数为空,执行{x=0,y=0}={},此时x,y的值为underfind,触发默认值

例子二:为函数参数指定默认值

function move({x,y}={x:0,x:0}){return [x,y];
}
move({x:3,y:8}); //[3,8]
move({x:3}); //[3,0]
move({}); //[underfind,underfind] 参数为空对象,此时x,y的值为underfind
move(); //[0,0]参数为空,触发函数参数默认值

例子三:对比例子一

function foo({x,y=5}){console.log(x,y);
}
foo(); //TypeError:Cannot read property 'x' of undefined

五、用途

  • 交换变量的值
  • 从函数返回多个值
  • 函数参数的定义
  • 提取JSON数据
  • 函数参数的默认值
  • 遍历Map结构
  • 输入模块的指定方法
const{SourceMapConsumer,SourceNode}=require("source-map")

欢迎访问我的个人博客

ES6变量的解构赋值注意点及用途(补充)相关推荐

  1. ES6变量的解构赋值--对象篇

    目录 使用方式 普通形式 嵌套结构 使用默认值 注意事项 上一篇我们讲解了数组的解构赋值,解构还可以用于对象.字符串等等,这里我们来讲解对象的解构赋值. ES6变量的解构赋值--数组_zxn20012 ...

  2. (34)2021-02-24(ES6变量的解构赋值)

    ES6变量的解构赋值 一. 变量的解构赋值 1.什么是解构 2.数组解构赋值 不完全解构 3.对象解构赋值 方法解构 注意点 4.字符串解构 5.函数参数的解构赋值 6.用途 6.1 交换变量的值 6 ...

  3. ES6——变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. let [a, b] = [1, 2]; let {c, d} = {c: 3, d: 4};console.log(a ...

  4. es6—变量的解构赋值

    数组的解构赋值 /* 1.变量的解构赋值: * 数组的元素是按次序排列的,变量的取值由它的位置决定: * 从数组和对象中提取值,对变量进行赋值,这被称为解构; * 属于"模式匹配" ...

  5. es6变量的解构赋值

    https://note.youdao.com/web/#/file/WEB0795aa69a66933c323f06127c9127f4d/note/WEBb0bbf2a9471ea54f2cb0f ...

  6. 【ES6】变量的解构赋值

    [ES6]变量的解构赋值 一.什么叫解构赋值? 二.解构赋值有哪些分类?写法? 1)对数组的解构赋值 2)对对象的解构赋值 3)对字符串的解构赋值 4)对数值和布尔值的解构赋值 5)对函数参数的解构赋 ...

  7. ES6的新特性(3)——变量的解构赋值

    变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; le ...

  8. Vue2.x—理解vuex核心概念action(使用到ES6的变量的解构赋值)

    Action Action 类似于 mutation,不同在于: Action 提交的是 mutation,而不是直接变更状态. Action 可以包含任意异步操作. 让我们来注册一个简单的 acti ...

  9. es6分享——变量的解构赋值

    变量的解构赋值:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前的写法: var a = 1; var b = 2; es6允许的写法 ...

  10. [ES6] 细化ES6之 -- 变量的解构赋值

    变量的解构赋值 解构赋值是什么 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值 var/let [变量名称1,变量名称2,...] = 数组或对象 本质上,这种写法属于"模式 ...

最新文章

  1. gtk移植到嵌入式_入行嵌入式研发10多年,一位工程师悟出了这些道理
  2. 使用指针给矩阵除主对角线外的元素赋值为0
  3. 使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算
  4. Heroku:革命性的Rails托管服务
  5. Linux下常用服务的端口号超详细整理
  6. mysql基础(DQL语言、DML语言、DDL语言)详解
  7. leetcode 88 Merge Sorted Array
  8. linux文件权限报错实例,自定义系统service SELinux权限报错
  9. Django:模板与视图
  10. Raki的读paper小记:LOOKING BACK ON LEARNED EXPERIENCES FOR CLASS/TASK INCREMENTAL LEARNING
  11. ITextSharp 使用
  12. 多服务器显卡使用状态监控工具实现
  13. android IO流_Android 开发技术周报 Issue#265
  14. numpy函数:arange(),reshape()用法,
  15. java jdk15.0.1环境配置(图文教程)
  16. word在使用Endnote时变得非常卡解决办法
  17. Kindle使用指南
  18. Java获取本月第一天是本周第几天
  19. php开源 tpshop,TPshop免费开源商城系统
  20. LoRa Gateway 笔记 3.1.3 帮助程序 util_pkt_logger 进行 LoRa 空口抓包

热门文章

  1. H264--语法及结构--2
  2. 1106 Lowest Price in Supply Chain(25 分)
  3. 【排列组合】只上代码不解释
  4. java 封闭类型_java – 如何获取封闭类?
  5. 华中科技大学计算机考纲,华中科技大学硕士研究生入学考试824信号与线性系统考研大纲...
  6. 爱默生电梯维修服务器,爱默生电梯故障代码及导致原因和解决方法
  7. java初始堆建议值_Java堆初始大小的建议值
  8. 富文本++php+源码,轻量级富文本编辑器wangEditor
  9. 如何安装python解释器_python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器...
  10. db powerdesign CDM、LDM、PDM、OOM的区别