this的替换
函数执行时,this默认指向调用者,有时我们希望让this指向其他对象。
call
函数名.call(替换this的对象, 参数列表)
例如,要调用a函数,传入两个参数 2和3,此时希望将this替换为对象b。
a(2,3) => a.call(b,2,3);
apply
与call用法相同,但apply将call中的参数列表替换为一个参数数组,再运行函数的时候将自动将数组打散。
a(2,3) => a.apply(b,[2,3]);
bind
上面的两种方法都是一次性调用的方法,有时我们希望重复调用被替换了this的函数。
bind与前者最大的不同是运行bind时不调用bind前的函数,而是创建一个函数副本,副本中的this被调换为bind后第一个参数的值。
var 新函数 = 旧函数.bind(
替换this的对象,
要绑定的实参值,
... ...
)
之后直接运行新函数即可。
新函数中的this和开头部分形参,已被永久替换为固定的对象和固定的参数值。
今后调用新函数时,只要传入可能变化的剩余几个实参值即可。
数组函数
indexOf查找
var i=arr.indexOf("元素", fromi)
在arr数组内,从fromi位置开始,找下一个和指定"元素"相同的元素所在的位置i。
如果没找到,返回-1。
判断
every判断与
判断数组中是否所有元素都符合要求.
var bool=arr.every(function(value, i, arr){
//value: 当前元素值
//i: 当前下标位置
//arr: 当前数组对象
return 判断条件
})
every会自动遍历arr数组元素,并在每次遍历中调用回调函数function,并传入辅助参数,当元素符合return返回的判断条件时继续遍历,否则遍历结束,返回flase,如果遍历全部完成则返回true。
some判断或
判断数组中是否包含符合要求的元素.
var bool=arr.some(function(value,i,arr){
return 判断条件
})
执行时,只要碰到一个元素判断为true,就不再遍历,直接返回true,否则返回false。
遍历
普通遍历 forEach
arr.forEach(function(value, i, arr){
//对当前元素执行的操作!
})
每遍历一个元素,就在这个元素上自动调用一次回调函数function,function中的操作时对数组本体直接操作。
数组映射 map
var 新数组 = 原数组.map(
function(value, i, arr){
return 要放入新数组中的元素值
})
map会创建一个新数组,回调函数function仍然会在每一次遍历中被调用,但返回值会赋给对应的新数组中的元素位置,完成后返回新数组,数组本体不变。
过滤和汇总
过滤
筛选原数组中符合条件的元素,以新数组的形式返回,不改变原本的数组。
var 新数组 = 原数组.filter(
function(value, i, arr){
return 判断条件
}
)
自动遍历原数组中每个元素。每遍历一个元素,就自动调用一次回调函数。如果当前元素经过回调函数验证,返回true,则加入新数组中。如果当前元素经过回调函数验证,返回false,则不加入新数组。
汇总
根据条件将数组中的元素内容进行筛选及各种运算,在一定规则下统计出结果。
var sum=arr.reduce(
function(prev, elem,i,arr){
//prev 保存截止到当前元素的临时汇总值。
return 根据已知数据对prev进行操作,得到的新的汇总值。
},起始值)