解构赋值:拆解数据解构,来给变量赋值
如果左边模式只匹配到右边模式的所有,则这个解构是完全解构
如果左边模式只匹配到右边模式的一部分,则这个解构是不完全解构
如果左侧模式中的个别变量没有匹配到右边模式,则这个解构是不成功解构
//数组解构赋值
let [ a , b ] = [ 5 , 6 ];
//a=5,b=6;
//字符串解构赋值
let [a, b, c, d, e] = 'hello';
// a = 'h' b = 'e' c = 'l' d = 'l' e = 'o'
//对象解构赋值
let { c , d } = { c:7 , d:8 }
//c=7 , d=8
{}里写的是对象里存在的属性(c和d是对象存在的属性,所以可以找到,并且能够找到对应的值,如果在解构
赋值的时候写了一个对象不存在的属性,那么因为在对象里无法找到,那么这个不存在属性的值就是
undefined),这种也叫做不成功解构
let { a , b } ={a:"ym"};
//a=ym
//b=undefined
嵌套类型的解构赋值
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { }] } = obj;
// x = 'hello'
解构默认值
在解构赋值的过程中当一个变量的值是undefined时,可以人为设置变量的默认值
在设置变量的默认值时,总是惰性求值的
let [a ,b=3]=[1];
//a=1 , b=3
function auto(){
console.log('执行');
return 'heaven'
}
let [a,b=auto()] = [1];
console.log(a,b)
//a=1
//b在解构赋值时值是undefined,所以b的值变成了默认值,结果为auto函数的执行结果:heaven
剩余运算符
...变量
1.这个变量必须写在匹配模式的最后面
2.这个变量会匹配到剩余的所有数据
3.这个变量是一个数组对象
let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]
利用剩余运算符计算参数之和
function sum(...num){
var sumNum = 0;
for(let i=0;i<num.length;i++){
sumNum += parseInt(num[i])
}
console.log(sumNum)
}
sum(1,2,3) //6
sum(1,2,"3") //6
sum(1,3,"6和4") //10