ES5
1.call/apply/bind
替换this
何时:只要this不是想要的,就用call/apply/bind替换
鄙视:三者的区别
call/apply:立刻调用函数并临时替换this为指定对象
何时:如果希望立刻调用函数时
如何:fun.call(obj,参数值,...)
立刻调用fun函数,并临时替换fun中的this为obj
fun.appy(obj,数组)
立刻调用fun函数,并临时替换fun中的this为obj,同时打散数组参数为单个参数值,再传给fun
tips:打散数组类型的参数只有用apply或者concat
var arr1=[1,2.3]; var arr2=[4,5,6]; arr1.push.apply(arr1,arr2);console.log(arr1)//[1,2,3,4,5,6];
var arr1=[1,2.3]; var arr2=[4,5,6]; var arr1=arr1.concat(arr2);console.log(arr1)//[1,2,3,4,5,6];
bind:基于原函数创建一个新函数,永久绑定this为指定对象
何时:如果希望基于原函数创建一个新函数时,或者说不是立刻调用
如何:fun.bind(obj,参数值,...)
创建一个和fun完全一致的新函数;永久绑定fun中的this为obj;永久绑定部分参数值
2.数组API
3组:
1.判断
every():判断数组中是否所有元素都符合条件
如何:var bool=arr.every(function(val,i,arr){
//val自动获得当前元素值
//i自动获得当前位置
//arr指当前数组本身
return 判断条件
})
原理:every用function去每个元素执行一次
只有所有元素都返回true时,整体才返回true
只要有一个返回false,则整体返回false
some:判断数组中是否包含符合条件的元素
如何:var bool=arr.some(function(val,i,arr){
//val自动获得当前元素值
//i自动获得当前位置
//arr指当前数组本身
return 判断条件
})
原理:some用function去每个元素执行一次
只有所有元素都返回false时,整体才返回false
只要有一个返回true,则整体返回true
//判断一个数组是否全是奇数
var arr1=[1,2,3,4,5,6,7,8];
function isodd(value){
return value%2==1;
}
console.log(arr1.every(isodd));
//判断哪个数组时升序排列
function isasc(val,i,arr){
return i<arr.length-1?val<=arr[i+1]:true;//undifined 在关系比较时会隐式转为NAN,NAN不大于小于等于任何值
}
console.log(arr1.every(isasc));
2.遍历API
forEach():对原数组中每个元素执行相同的操作。直接修改原数组
如何:arr.forEach(function(val,i,arr){arr[i]=新值})
map():依次取出原数组中的值,执行相同的操作后,放入新数组返回。不直接修改原数组,返回操作后的新数组
如何:var newarr = arr.map(function(val,i,arr){return 新值;})
var arr=[1,2,3,4,5];
arr.forEach(function(val,i,arr){
arr[i]=val*2;
})
var arr1 = arr.map(function(val){
return val*2
})
3.过滤和汇总
filter():选取数组中符合条件的元素,组成新数组。原数组不变 arr.filter(function(val,i,arr){return 判断条件})
//选取arr中的偶数
var arr=[1,2,3,4,5];
var arr1 = arr.filter(function(val,i,arr){
return val%2=0;
})
reduce():汇总:遍历数组中的每一个元素,汇总出一个最终的结果
如何汇总:var result = arr.reduce(prev,val,i,arr){//prev截至到目前为止的临时汇总值}
//求和
var arr=[1,2,3,4,5];
var sum = arr.reduce(function(prev,val){
return prev+val;
})
var arr2=[2,4,6,8];
var sum=arr2.reduce(function(prev,val){return prev+val;},sum);