第二章 变量的解构赋值
1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
2.只要某种数据结构具有 Iterator 接口(后面会讲),都可以采用数组形式的解构赋值。
3.如果等号右边不是数组(严格的说不可解构)将会报错
4.对于set结构可以解构
(let[x,y,z]=newSet(['a','b','c']);x=a)
5.对象的解构赋值 :对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let{foo,bar}={foo:'aaa',bar:'bbb'};
对象的解构赋值是下面形式的简写
let{foo:foo,bar:bar}={foo:'aaa',bar:'bbb'};
6.解构赋值允许指定默认值。ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。
7.如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。
8.默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
9.与数组一样,解构也可以用于嵌套结构的对象。
10.对象的解构也可以指定默认值。默认值生效的条件是,对象的属性值严格等于undefined。
11.用途:
变量的互换:let x=1;let y=2;[x,y]=[y,x];
从函数返回多个值:function example(){return[1,2,3];} let[a,b,c]=example();
function example(){return{foo:1,bar:2};} let{foo,bar}=example();
函数参数的定义
// 参数是一组有次序的值
functionf([x,y,z]){...}f([1,2,3]);
// 参数是一组无次序的值
functionf({x,y,z}){...}f({z:3,y:2,x:1});
提取 JSON 数据
letjsonData={
id:42,status:"OK",data:[867,5309]
};
let{id,status,data:number}=jsonData;
console.log(id,status,number);
// 42, "OK", [867, 5309]
函数参数的默认值
jQuery.ajax=function(
url,{async=true,
beforeSend=function(){},
cache=true,
complete=function(){},
crossDomain=false
,global=true,
// ... more config}={})
{
// ... do stuff
};
遍历 Map 结构
const map=newMap();
map.set('first','hello');
map.set('second','world');
for(let[key,value]of map){console.log(key+" is "+value);}
// first is hello
// second is world
输入模块的指定方法
const{SourceMapConsumer,SourceNode}=require("source-map");