ES6知识点复习(二)
2022-07-15 本文已影响0人
假笑boys
变量的解构赋值
let [a,b,c] = [1,2,3]
console.log(a,b,c) // 1,2,3
let [one,...two] = [12,13,14,15]
console.log(one,two) // 12,[13,14,15]
let [x,y,...z] = ['a']
console.log(x,y,z) // a undefined []
// 对于 set结构,也可以使用数组的解构赋值
let [first,twos,three] = new Set(['a','b','c'])
console.log(first)
- 解构赋值允许指定默认值,es6内部使用严格相等运算符 ===
- 默认值可以引用解构赋值的其他变量,但该变量必须是已经声明。
let [x=1,y=x] = []
console.log(x,y) 1,1
let [x=1,y=x] = [2]
console.log(x,y) // 2,2
let [x=1,y=x] = [1,2]
console.log(x,y) // 1,2
let [x=y,y=1] = [];
console.log(x,y) // Cannot access 'y' before initialization 无法在初始化之前使用
因为x用y做默认值时,y还没有声明。
- 解构不仅可以用于数组,还可以用于对象
let { foo,bar} = {foo:'aaa',bar:'bbb'}
console.log(foo,bar) // aaa,bbb - 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let { baz } = {foo:'aaa',bar:'bbbb'}
console.log(baz) // undefined
- 解构失败 变量的值等于 undefined
- 如果变量名与属性名不一致 必须写成如下:
let { foo:baz } = {foo:'justin',bar:'bieber'}
console.log(baz)
- 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
var { x=3 } = {}
console.log(x) // 3
var {x,y=5} ={x:1}
console.log(x,y) // 1,5
var {x:y=3} ={}
console.log(y) // 3
var {x:y=3} = {x:5}
console.log(y) // 5
- 将一个已经声明的变量用于解构赋值,必须非常小心
- 错误写法
let x;
{x} = {x:1}
console.log(x) //SyntaxError: Unexpected token '='
- 正确写法
let x;
({x}={x:1})
console.log(1)`
const [a,b,c,d,e] = 'justin'
console.log(a,b,c,d,e) // j u s t i
- 类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值
let {length:len} ='justin'
console.log(len) // 6
- 解构赋值时,如果等号右边是数值和布尔值,则会转为对象
let {toString:s} = 1234
console.log(s=== Number.prototype.toString) // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
function add([x,y]){
return x+y
}
add([1,2]) // 3
- 比较特殊例子
[[1,2],[3,4]].map(([a,b]) => a+b) // [3,7]
- 特殊写法
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]
- 上面代码是为函数move的参数指定默认值,而不是为变量x和y指定默认值,所以会得到与前一种写法不同的结果。
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();
- 提取JSON数据
- 函数参数的默认值
- 遍历Map解构