ES6函数扩展
1.允许函数有默认值,可以直接在参数后面设置
2.引入rest参数(...变量名)
获取函数的多余参数,这样就不需要使用arguments
对象了。rest 参数搭配的变量是一个数组,
function sum(prefix, ...rest) {
//rest = [1,2,3,4];
//1.循环求合
/* let result = 0;
//循环数组中的每个元素,把它们依次传入对应的函数
rest.forEach(function(item){
result+=item;
})*/
//return prefix + (result);
}
console.log(sum('$', 1, 2, 3, 4));
reduce
reduce 计算 汇总 收敛 把一个数组中的一堆值计算出来一个值
let result = arr4.reduce(function(val,item,index,origin){
console.log(item,index);
let sum = val + item;//返回值会成为下一次函数执行的时候的val
if(index == 0){
return sum/origin.length;
}else{
return sum;
}
},0);
console.log(result);
reduceRight 从右向左收敛
Array.prototype.reduceRight = function(reducer,initialVal){
for(let i=this.length-1;i>=0;i--){
initialVal = reducer(initialVal,this[i],i,this);
}
return initialVal;
}
let result = arr4.reduceRight(function(val,item){
return val+item;
},0);
console.log(result);
展开运算符 ...
展开运算符相当于把数组中的每个元素依次取出来放进去
let arr5 = [1,2,3];
let arr6 = [4,5,6];
let arr7 = [...arr5,...arr6];
console.log(arr7);
解析成ES5
let arr7 = [].concat(arr5,arr6);
let max = Math.max(...arr6)
解析成ES5
let max = Math.max.apply(Math,arr6);
对象解构
let obj1 = {name:'1'};
let obj2 = {age:2};
obj3 = {...obj1,...obj2};
console.log(obj3);//{name:'1',age:2}
ES5对象赋值
1.for循环
for(let key in obj1){
obj3[key] = obj1[key];
}
for(let key in obj2){
obj3[key] = obj2[key];
}
2.assign
Object.assign(obj3,obj1,obj2)
箭头函数
1.箭头函数没有自己的this,他会使用上层this
let obj = {
name:'px',
getName(){
let self=this;
setTimeout(function(){//Timeout
//console.log(this); //undefind
console.log(this.name); //px
},1000)
}
}