阅读阮大大的Es6,获得的变量的结构方法
地址:阮一峰的ES6
变量的解构赋值
数组的解构赋值
对象的解构赋值
字符串的解构赋值
数值和布尔值的解构赋值
函数参数的解构赋值
1数组的解构赋值 1 2 3 4 5 let [a,b,c] = [1 ,2 ,3 ] let [a,[b,[c]]] = [1 ,[2 ,[3 ]]] let [x,y] = [1 ,2 ,3 ] let [...arr] = [1 ,2 ,3 ] let [first,...arrAll]=[1 ,2 ,3 ,4 ]
结构赋值为何左右两边为数组? 正常的赋值是一个一个赋值,解构赋值是吧需要赋值的解析重构,循环赋值 通过数组可遍历的特性就可以解构
解构赋值的默认值 1 2 3 let [a=11 ] = [] let [x = 1 ] = [undefined ];let [x = 1 ] = [null ];
2对象的解构赋值 1 2 3 4 5 6 7 8 9 10 11 12 let {a}={a :'good' ,b :'nice' } let {log,sin,cos} = Math let {log} = console log('hello word' ) sin(90 ) let {a,{b}} = {a :11 ,{b :22 }} var {x = 3 } = {}; var {x : y = 3 } = {x : 5 }; let {a,...aa} = {a :{},b :{a :2 },c :{d :4 }}
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
注意点 1 2 3 4 5 6 7 8 let x;{x} = {x : 1 }; ({x}={x :1 }); ({}={a :dd}) let {0 :first} = [1 ,2 ,3 ]
3字符串的解构赋值 1 2 let [a,b,c,d,e] = 'hello' let {length : len} = 'hello' ;
4数值和布尔值的解构赋值 1 2 3 4 5 6 7 8 let {toString : s} = 123 ;s === Number .prototype.toString let {toString : s} = true ;s === Boolean .prototype.toString let { prop : x } = undefined ; let { prop : y } = null ;
5函数参数的解构赋值 函数的解构赋值我们经常使用 当我们进行传参时 就会进行解构赋值
1 2 3 4 function fn (a,b ) { return a+b } fn(2 ,3 )
函数参数的默认值
1 2 3 4 5 6 7 8 function fn ({x = 0 , y = 0 } = {} ) { return [x, y]; } fn({x : 3 , y : 8 }); fn({x : 3 }); fn({}); fn();
另一种函数的默认值
1 2 3 4 5 6 7 8 9 function fn ({x, y} = {x:0 ,y:0 } ) { return [x, y]; } fn({x : 3 , y : 8 }); fn({x : 3 }); fn({}); fn();
圆括号 圆括号是为了解决赋值时解析的无法辨别,但是要注意使用时机,否则会报错
6遍历 Map 结构 任何部署了 Iterator 接口的对象,都可以用for...of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。
1 2 3 4 5 6 7 8 9 const map = new Map ();map.set('first' , 'hello' ); map.set('second' , 'world' ); for (let [key, value] of map) { console .log(key + " is " + value); }
如果只想获取键名,或者只想获取键值,可以写成下面这样。
1 2 3 4 5 6 7 8 9 for (let [key] of map) { } for (let [,value] of map) { }
7输入模块的指定方法 加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。
1 const { SourceMapConsumer, SourceNode } = require ("source-map" );