ES6 第三章 变量的解构赋值 具体参照http://es6.ruanyifeng.com
2024-08-22 20:08:40
1.基本用法
let [a, b, c] = [1, 2, 3];
左右两边解构格式要保持一致。
2.默认值
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
3,.字符串的解构赋值(这里只写了最简单的例子当然还有很多复杂的应用)
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
4.对象的解构赋值
解构不仅可以用于数组,还可以用于对象。
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
5.数值和布尔值的解构赋值
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined
和null
无法转为对象,所以对它们进行解构赋值,都会报错。
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError
6.函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
7.圆括号问题
只要有可能导致解构的歧义,就不得使用圆括号。
不能使用圆括号的情况
1)变量声明语句
// 全部报错
let [(a)] = [1];
let {x: (c)} = {};
let ({x: c}) = {};
let {(x: c)} = {};
let {(x): c} = {};
let { o: ({ p: p }) } = { o: { p: 2 } };
2)函数参数
// 报错
function f([(z)]) { return z; }
// 报错
function f([z,(x)]) { return x; }
(3)赋值语句的模式
// 全部报错
({ p: a }) = { p: 42 };
([a]) = [5];
可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。
[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确
个人觉得就知道前面大概怎么用就可以了,后面复杂的情况暂时还没发现有很好的用途。
最新文章
- 制作bat脚本,抓取Android设备logcat
- 从零开始学 Java - Spring 一主多从、多主多从 数据库配置
- hdu 5719(Arrange)(冷静分析)
- iOS--二维码
- 【Linux】 JDK安装及配置 (tar.gz版)
- 测可用!ecshop立即购买和加入购物车按钮共存的方法
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html
- 说说C#和.NET的关系
- iOS之常用的判NULL的方法
- password加密问题
- Oracle COMMIT语句的处理顺序
- hbmy周赛1--D
- Python-待
- 面试简单整理之JVM
- LOJ114 k大(xiao)异或和(线性基)
- ubuntu 安装JDK1.6(jdk-6u45-linux-x64.bin)
- [SQL]查询最新的数据
- ZH奶酪:ionic+angularJS+cordova(FileTransfer)上传图片【移动端】
- HDU 3549 Flow Problem(最大流模板)
- Python_12-线程编程