ES6学习笔记2-变量的解构赋值

数组的解构赋值

let [a,b,c] = [1,2,3];
a	//1
b	//2
c	//3

模式匹配,只要等号两侧模式相同,左边的变量就会被赋予对应的值。

  1. 解构不成功,变量的值等于undefined
  2. 解构可以嵌套;
  3. 右边不是可遍历的结构,将会报错;
  4. 只要某种数据结构具有Iterator结构,即可使用数组形式的解构赋值;
  5. 解构赋值允许使用默认值;若数组成员不严格等于(!===)undefined,默认值不会生效
let [x=1] = [undefined]		//x=1
let [x=1] = [null]		//x=null
  1. 默认真可以引用解构赋值的其他变量,但该变量必须已经声明。
let [x=1,y=x] = [];	//x=1;y=1
let [x=y,y=1] = [];	//ReferenceError: can't access lexical declaration `y' before initialization

对象的解构赋值

由于对象的属性没有次序,区别与数组

let { foo:foo,bar:bar } = {foo:"aaa",bar:"bbb"}	//完整形式
let { foo,bar } = {foo:"aaa",bar:"bbb"}			//简写形式

对象的解构赋值的内部机制是:先找到同名属性,然后再赋值给对应的变量。真正被赋值的是后者

let { foo:baz } = {foo:"aaa",bar:"bbb"}
baz // "aaa"
foo // error:foo is not defined

foo是匹配的模式,baz才是变量。真正被赋值的是变量baz.

如果要将一个已经声明的变量用于解构赋值,则会报错。Javascript引擎会将{x}理解成代码块,从而发生语法错误。

let x;
{x}={x:1}		//SyntaxError: expected expression, got '='

//正确写法
let x;
({x}={x:1});

字符串也可解构赋值

数值和布尔值的解构赋值

解构赋值的规则:只要等号右边的值不是对象或者数组,就先将其转为对象。因为undefinednull无法转为对象,所以对他们进行解构赋值会报错。

let {prop:x} = undefined;	//TypeError: undefined has no properties
let {prop:y} = null;		//TypeError: null has no properties

函数参数也可解构赋值

解构赋值的用途

  1. 交换变量的值
let x = 1;
let y = 2;
[x,y] = [y,x]
  1. 从函数返回多个值
function example(){
	return [1,2,3]
}
let [a,b,c] = example()
  1. 函数参数的定义
    方便的将一组参数与变量名对应起来,可以是有次序的值也可以是无次序
function f({x,y,z}){
	...
}
f({z:3,y:2,x:1})
  1. 提取JSON数据
let jsonData = {
	id: 42,
	status: "OK",
	data: [867,5309]
};
let { id, status, data: number } = jsonData;
id	//42
status	//"OK"
number 	//[867,5309]
  1. 函数参数的默认值,指定参数的默认值
function foo({x, y = 5} = {}) {
  console.log(x, y);
}
foo() // undefined 5
  1. 遍历map结构
    任何部署了Iterator接口的对象都可以用for…of循环遍历。map结构原生支持Iterator。
let map = new Map();
map.set("f","hello");
map.set("s","world")
for (let [key,value] of map){
	console.log(key +' '+ value)
}
// f hello
// s world
  1. 输入模块的制定方法
const { SourceNode } = require("source-map")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值