ES6学习历程(变量的解构赋值)
一.数组的解构赋值
1.举几个例子足以理解
let [a, b, c] = [1, 2, 3]; a:1; b:2; c:3;
let [x, , y] = [1, 2, 3]; x:1 y:2;
let [foo, [[bar], baz]] = [1, [[2], 3]]; foo:1; bar:2; baz:3;
let [head, ...tail] = [1, 2, 3, 4];head:1; tail:[2,3,4];
- let [a, [b], d] = [1, [2, 3], 4];a:1 b:2 d:4;
二.对象的解构赋值
1.举几个例子足以理解
let { a, b} = { a: "aaa", b: "bbb" };a:"aaa" b:"bbb";
let { c } = { a: "aaa", b: "bbb" };c:undefined;let obj = { p: [ 'Hello', { y: 'World' } ] }; let { p: [x, { y }] } = obj;x:'hello' y:'world';const node = { loc: { start: { line: 1, column: 5 } } }; let { loc, loc: { start }, loc: { start: { line }} } = node; line // 1 loc // Object {start: Object} start // Object {line: 1, column: 5}var { message: msg = 'Something went wrong' } = {}; msg // "Something went wrong"(对象的解构赋值也可以设置默认值);默认值生效的条件:对象的属性值严格等于undefined。var {x = 3} = {x: null}; x // null;null 不严格的等于undefined;// 报错 let {foo: {bar}} = {baz: 'baz'}; foo的值等于undefined;undefined没有bar属性;// 错误的写法 let x; {x} = {x: 1}; // SyntaxError: syntax error;对于已经声明的值进行解构赋值的时候要格外小心;正确写法({x} = {x: 1});不加小括号的时候,{x}是一个独立的代码块;常用的场景:let { log, sin, cos } = Math;
let arr = [1, 2, 3]; let {0 : first, [arr.length - 1] : last} = arr; first // 1 last // 3
三.字符串的解构赋值
1.仍然举几个例子说事情:
const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d // "l" e // "o";
let {length : len} = 'hello'; len // 5; 因为'hello'也有length属性,所以,len==5;
四.数值和布尔值的解构赋值
1.解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
let {toString: s} = 123; s === Number.prototype.toString // true let {toString: s} = true; s === Boolean.prototype.toString // true;;;;上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值。let { prop: x } = undefined; // TypeError let { prop: y } = null; // TypeError;;;解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
五.函数参数的解构赋值
1.function add([x, y]){ return x + y; } add([1, 2]); // 3
2.function move({x, y} = { x: 0, y: 0 }) { return [x, y]; } move({x: 3, y: 8}); // [3, 8] move({x: 3}); // [3, undefined] move({}); // [undefined, undefined] move(); // [0, 0];带有默认值的函数;
五.函数参数的解构赋值
1.圆括号的问题:ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。下列情况均会报错:
- 变量的声明不可以使用圆括号;
- 函数参数不允许使用圆括号;
- 复制语句模式不可以使用圆括号;
ES6的文档下面还有部分内容,如果感兴趣可以自己再去浏览:变量的解构赋值;
ES6学习历程(变量的解构赋值)的更多相关文章
- ES6学习之变量的解构赋值
前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...
- ES6 学习笔记 - 变量的解构赋值
变量的解构赋值 学习资料:ECMAScript 6 入门 数组的解构赋值 基本用法 可以从数组中提取值,按照对应位置,对变量赋值.这种写法属于"模式匹配". let [a, b, ...
- ES6学习4 变量的解构赋值
变量的解构赋值 一.数组结构赋值 1.数组结构赋值 let [a, b, c] = [1, 2, 3]; ES6 可以从数组中提取值,按照对应位置,对变量赋值. 1) 本质上,这种写法属于“模式匹配 ...
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...
- ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值
ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...
- ES6 - 基础学习(3): 变量的解构赋值
解构赋值概述 1.解构赋值是对赋值运算符的扩展. 2.它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值. 3.代码书写上显得简洁且易读,语义更加清晰明了:而且还方便获取复杂对象中的数据字 ...
- ES6入门之变量的解构赋值(二)
前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...
- js-ES6学习笔记-变量的解构赋值
1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 2.ES6允许写成:let [a,b,c] = [1,2,3];上面代码表示,可以从数 ...
- es6基础入门变量的解构赋值
let [a, b, c] = [1, 2, 3]; let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar baz let [ , , third] = [ ...
随机推荐
- React Native 中的component 的生命周期
React Native中的component跟Android中的activity,fragment等一样,存在生命周期,下面先给出component的生命周期图 getDefaultProps ob ...
- opencv中RGB转HSV
cvCvtColor(src,dst,CV_BGR2HSV); 当中,src为三通道的,dst也为三通道的. OPENCV 中 H.S.V.顺序分别为3*x+0 3*x+1 3*x+2 open ...
- luogu3959 宝藏 搜索+剪枝
题目大意 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
- 解决:sql2005 安装完后 没有服务的问题
去下面网站下载SQLEXPR_CHS.EXE然后安装就ok了.http://www.microsoft.com/downloadS/details.aspx?familyid=220549B5-0B0 ...
- Python三次登陆
题目:Python实现三次登陆 不要急于马上把三次登陆写出来,一定要将复杂的程序简单化,必须一步一步地去扩展,这样才保证不会出错. 步骤一:实现简单的一次登陆 # 事先定义 user = 'dark_ ...
- [Swift通天遁地]三、手势与图表-(12)创建复合图表:包含线性图表和柱形图表
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- matlab中增加Java VM 的堆空间(解决xml_io_tools出现的OutOfMemory问题)
今天用MATLAB写程序,调用了xml_io_tools(很赞的一个xml读写工具包)中的函数,但是由于我要书写的文件比较大,5m左右,运行时不知道xml_io_tools中的哪一块超出了java中的 ...
- nginx深入
1.编译安装配置完成 /opt/nginx11/html/index.html 这是网页的首页文件 2. nginx.conf主配置文件学习 ############################# ...
- Unity学习-软件的基本操作(二)
基本操作 1:Scene中 以小手显示,平移画布,与鼠标中键一样 2:平移 游戏对象,组件的 Position属性 也可设置 3:旋转 游戏对象,组件的 Rotation属性 也可设置 4:缩放 游戏 ...
- iOS keychain入门
学了很久的iOS,一直都是明文保存用户名和密码在本地,手机一般都是自己用的,而且非越狱手机东西也不怎么能拿到数据,所以也就没在乎那么多,当然,这是不科学的.悄悄的说,这块一直不是我写的~~~ 用户隐私 ...