对象字面量
1.属性的简洁表示法:ES6允许对象的属性直接写变量,这时候属性名是变量名,属性值是变量值。
2.方法也可以简写,省掉function。只有对象内部的函数可以省掉function
3.属性名表达式:ES6允许用表达式作为属性名,但是一定要将表达式放在方括号内。会把表达式toString()
var obj={
"name":"AOTU",//标准写法
member:["sy","xy","zl","jj","zx"],//常用写法
[true]:"yyds",
[{kh:"aotuyouzhi"}]:"chengfengpolang"//ES6写法
};
console.log(obj);
ps:属性的简洁表示法和属性名表达式不能同时使用,否则会报错。
对象的拓展运算符
拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象,是浅拷贝,两个对象中引用数据是同一个引用。
除了用于取出对象的全部成员,还可以取出数组的所有元素,用于函数的形参表示有多个形参,可以取出传入的全部实参。拓展运算符用于数组,对象,Map,Set,函数的形参。
可用于合并两个对象和数组
自定义的属性和拓展运算符对象里面属性存在相同的时候,同一个属性名值会被覆盖,取值时访问最后一次的赋值。拓展运算符后面是空对象,没有任何效果也不会报错。拓展运算符后面是null或者undefined,没有效果也不会报错。
对象的新静态方法
Object.is(value1, value2):用来比较两个值是否严格相等,与(===)基本类似。
与===的区别
一是+0不等于-0
Object.is(+0,-0); //false
+0 === -0 //true
二是NaN等于本身
Object.is(NaN,NaN); //true
NaN === NaN //false
数组的新方法和新静态方法
新静态方法
1.Array.of():
将参数中所有值作为元素形成数组。是静态方法,等价于new Array()用于创建数组,两者区别在于传入一个值时也会作为元素保存在数组中,而new Array是数组长度。
2.Array.from():
将类数组对象或可迭代对象转化为数组。可以是数组,类数组,Map,Set以及字符串转化为数组。
可以传入三个参数,第1个参数是想要转换的类数组对象或可迭代对象,第2个参数是函数,用于对每个元素进行处理,放入数组的是处理后的元素,第3个参数是用于指定 传入的函数执行时的 this 对象,没有指定就是window对象。需要转换的类数组对象或可迭代对象内部有几个元素回调函数就会调用几次。
var obj={name:"function"}
var s1=new Set();
s1.add(1);
s1.add(2);
var arr=Array.from(s1,function(el){
console.log(el,111);
console.log(this,222);
return `${el} is a number`;
},obj);
console.log(arr);
var s1=new Set();
s1.add(10);
s1.add(20);
var arr=Array.from(s1,function(el){
console.log(el,666);
console.log(this,777);
return el+"岁";
});
console.log(arr,888);
新方法
3.find():
查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。传入的参数是一个回调函数,是否符合的条件由回调函数提供。返回的是数组元素,数组空位处理为 undefined
4.findIndex():
查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。参数1:回调函数,参数2(可选):指定回调函数中的 this 值。返回的是数组下标,数组空位处理为 undefined
5.fill():
将一定范围索引的数组元素内容填充为单个指定的值,可以做替换。参数1:用来填充的值,参数2:被填充的起始索引,参数3(可选):被填充的结束索引,默认为数组末尾,替换值时不会包含结束的索引。
var arr=[26,27,7,29,10,3,11];
var re=arr.fill(1996,2,5)//会替换下标为2,3,4的元素
console.log(re);
6.includes():
数组是否包含指定值。注意:与 Set 和 Map 的 has 方法区分;Set 的 has 方法用于查找值;Map 的 has 方法用于查找键名。
7.flat():
嵌套数组转一维数组,可指定嵌套层数,会自动跳过空位。
实现flat方法的原理,多维数组将为一维数组。
Array.prototype.myFlat=function(count){
let arr=[];//用于存储结果的数组
for(let i=0;i<this.length;i++){
//如果元素是数组且count大于0时,继续遍历得到的数组自调用函数,对数组降维
if(Array.isArray(this[i])&&count>0){
let newarr=this[i].myFlat(count-1);//自调用函数
for(let j=0;j<newarr.length;j++){
arr.push(newarr[j]);
}
}else{//元素不是数组直接添加
arr.push(this[i])
}
}
return arr;
};
let arr=[[311],729,[[816],[530,710]]];
console.log(arr.myFlat(Infinity));
entrys():遍历键值对,keys():遍历键名,values():遍历键值。数组含空位
类数组对象
一个类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符(只包含使用从零开始,且自然递增的整数做键名)。