1-ES6解构:
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于undefined。
1.数组解构
几种解构方式:
1.
let [a,b,c] = [1,2,3];
console.log(a,b,c); //1,2,3
2.
let [a,b,c] = [1,[2,3],4]
console.log(a,b,c); //1,[2,3],4
3.不完全解构
let [a,[b],c] = [1,[2,3,4],5];
console.log(a,b,c); //1,2,5
4.集合解构 ... 拓展运算符
拓展运算符:
...用在=左边,聚合的作用(对象、数组的解构)
...用在=右边,展开(剥离)的作用
let [a,...b] = [1,2,3,4,5];
console.log(a,b); //1,[2,3,4,5]
5.默认值解构:不设置对应值时,默认值生效,匹配到值后,默认值不生效
let [a,b=5,c,d] = [1,2,3,4,5];
console.log(a,b,c,d); //1,2,3,4
let [a,b,c=10,d=5] = [1,2];
console.log(a,b,c,d); //1,2,10,5
6.默认值也可以是函数,函数有返回值打印返回值,没有返回值打印undefined
function myFun(){
console.log('函数');
return 1;
}
let [a,b,c = myFun()] = [1,2];
console.log(a,b,c);
2.对象解构
1.
let {name,age} = {name:'zs',age:12};
console.log(name,age);
-------------------------------------
//如果变量名和属性名不一致,需要重命名
let {name:username,age:userage} = {name:'zs',age:12};
console.log(username,userage);
2.嵌套解构
let obj = {x:['hello',{y:'world'}]};
let {x:[a,{y:b}]} = obj;
console.log(a,b);
3.默认值解构
let {name,age,gender='nv'} = {name:'zs',age:12,gender:'nan'};
console.log(name,age,gender);
3.字符串、数值number、boolean值解构
let [a,b,c,d,e] = 'hello';
console.log(a,b,c,d,e);
//字符串转数组
let [...arr] = 'hello';
console.log(arr);
//对象解构字符串原型中的方法和属性
let {length,toString} = 'hello';
console.log(length,toString);
//number/boolean只能使用{}解构,不能使用[]解构
let {toString,valueOf} = 10;
console.log(toString,valueOf);
let {valueOf} = true;
2-对象
ES6中规定可以直接在对象中写入变量和函数作为对象的属性和方法,此时属性名为变量名, 属性值为变量的值。
1.简写
let name = "zs";
let obj = {
name,
sayName() {}
}
2.API拓展
Object.is(a,b) 判断a,b两个值是否一样,类似于 ===
Object.assign() 深复制或者合并对象
Object.assign(obj1, obj2) 深复制,将obj2复制给obj1
Object.assign(obj1, obj2, obj3) 对象合并,将obj1、obj2合并后复制给obj1
Object.setPrototypeOf(obj1, obj2) 为目标对象设置原型,将obj2设置成obj1的原型
Object.getPrototypeOf() 获取目标对象的原型
Object.keys() 返回对象属性名组成的数组
Object.values() 返回对象属性值组成的数组
Object.entries() 返回对象[属性名, 属性值]组成的二维数组
3-数组
API拓展
Array.from() 将其他类型数据转成数组
Array.of() 创建数组实例,实参就是数组的元素
Array.prototype.find() 返回满足条件的第一个元素,参数为函数
Array.prototype.findIndex() 返回满足条件的第一个元素的索引,参数为函数
Array.prototype.includes() 判断当前数组中是否包含某个元素,参数为元素,返回true/false
Array.prototype.fill() 填充数组(所有元素填充),修改数组原值
Array.prototype.keys() 索引的迭代器对象
Array.prototype.values() 元素的迭代器对象
Array.prototype.entries() 键值对的迭代器对象