怎么个解构法叻?
先来个例子:
用了ES6解构的:
let zoo = { dog: 'harry', cat: 'miumiu' };
let { dog: a, cat: b } = zoo;
console.log(a) // 'harry'
console.log(b) // 'miumiu'与旧写法的比较:
let zoo = { dog: 'harry', cat: 'miumiu' };
let a = zoo.dog;
let b = zoo.cat;
console.log(a) // 'harry'
console.log(b) // 'miumiu'所以结构就是 => 按照你自己的意愿从数组和对象中提取值,然后对你定的变量进行赋值,这种以前写很多行现在只要一行的方式,被称为解构(Destructuring)。
看了上面的例子,聪慧的妹子们应该就知道大概是个什么意思了吧,下面就是解构常见的用法;
有像这样的:
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3以及这样的:
let [ , , third] = ["foo", "bar", "baz"];
third // "baz"还有这样的:
let [head, ...tail] = [1, 2, 3, 4];//"..."这三个点是ES6里的扩展运算符,意思是将一个数组转为用逗号分隔的参数序列。
head // 1
tail // [2, 3, 4]所以从上面这些例子可以看出:“解构遵循“模式匹配”,只要等号两边的模式或者说是结构相同,左边的变量就会被赋予相对应的值。
PS:
“如果解构不成功,变量的值就等于undefined。”比如:
“let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []”结构可以设定默认值:
[x, y = 'b'] = ['a']; // x='a', y='b'
[x, y = 'b'] = ['a', undefined]; // x='a', y='b'当某一个值严格等于(===)undefined时,默认值会自动生效;
对象解构
由于对象与数组不同,对象的属性们可是不分先后的,所以变量名必须与对象的属性名相同;
对象的解构其实是:先找到同名属性,再赋值给对应变量
一个例子:
var { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined上面代码中,真正被赋值的是变量baz,而不是模式foo
forEach()与解构;
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数;
语法:
array.forEach(function(Value, index, arr), thisValue);例子:
var sum = 0;
[1, 2, 3, 4].forEach(function (item, index, array) {
sum += item;
});
alert(sum); // 10与解构配合天衣无缝:
let items = [ ['foo', 3], ['bar', 9] ];
items.forEach(([word, count]) => console.log(word+' '+count));上面等于:
let items = [ ['foo', 3], ['bar', 9] ];
items.forEach(({word: w, count: c}) => console.log(w+' '+c));ps:ES6的for-of循环语句中也可以使用解构:
let items = [ ['foo', 3], ['bar', 9] ];
for ([word, count] of items) {
console.log(word+' '+count);
}