var arr = [1,2,3,4,2];
Array.prototype.aa = function(){}
Array.prototype.bb = 'bb';
//如果用for..in来寻欢arr这个数组的话 会把原型链上面的方法和属性都一起循环了
//所以一般不用这个API来循环数组 一般是直接使用for来循环当前数组
//数组的循环方式
/*
array.forEach(callback(currentValue, index, array){
//do something
}, this)
callback 为数组中每个元素执行的函数,该函数接收三个参数:
currentValue 数组中正在处理的当前元素。
index可选 数组中正在处理的当前元素的索引。
array可选 forEach()方法正在操作的数组。
thisArg可选 可选参数。当执行回调 函数时用作this的值(参考对象)。
//forEach() 方法对数组的每个元素执行一次提供的函数。是没有返回值的
//forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)
//forEach 无法在所有元素都传给给调用的函数之前终止遍历
// return false在执行中只是终止本次继续执行 而不是终止for循环的额
//forEach 无法通过正常方式终止遍历 但是可以通过抛出异常的方式实现终止
arr.forEach(function(val,key,arr){
if(val == 2){
console.log(val);
//continue;
//break;
//return false
//上述三种方式都不能终止遍历 而且会报错哦
}
})
//阻止forEach的方式 但是不建议使用
try{
arr.forEach(function(val,key){
console.log(val);
if(val == 2){
throw new Error('error');
}
})
}catch(e){
if(e.message != 'error') throw e;
}
//可选参数的 thisArg可选
function Counter() {
this.sum = 0;
this.count = 0;
}
Counter.prototype.add = function(array) {
array.forEach(function(entry) {
this.sum += entry;
++this.count;
}, this);
//console.log(this);
};
var obj = new Counter();
obj.add([1, 3, 5, 7]);
obj.count;
// 4 === (1+1+1+1)
obj.sum;
// 16 === (1+3+5+7)
//every方法
//every 默认的就是返回一个false;代码没有return关键词 返回就是默认的,而且循环第一个就退出了
// 有返回的话 根据返回的条件来判断 如果判断条件为真则继续循环 为假则直接跳出循环
// return true 则循环完数组的每一个元素,return false 循环第一个的时候就退出了
var arr = [1,2,3,4,2];
var item = arr.every(function(val,key){
console.log(val);
//return val>2;
//return true;
})
console.log(item);
//some方法 基本与every是相反的
//some 默认的就是返回一个false;代码没有return关键词 返回就是默认的,但是数组会全部循环完
// 有返回的话 根据返回的条件来判断 如果判断条件为真则跳出循环 为假则直接继续循环
// return true 则循环第一个的时候就退出了,return false 循环完数组的每一个元素
var arr = [1,2,3,4,2];
var item = arr.some(function(val,key){
console.log(val);
//return val>2;
//return true;
})
console.log(item);
filter方法
// 使用指定的函数册数数组所有的元素 创建并返回一个包含所有通过测试的元素的一个新数组
//filter为数组中的每个元素调用一次callback(不包括通过某些方法删除或者未定义的项,值定义为undefined的项除外),
并利用所有callback返回true或等价于true的元素创建一个新数组,未通过callback测试的元素会被跳过,不会包含在新数组里。
用法
1.去掉数组中的空字符串项
2.去掉数组中不符合的项
var arr = [1,2,3,4,2];
var item = arr.filter(function(val,key){
return val>2;
})
console.log(item); //[3,4];
map方法
//有返回值(创建一个新的数组) 可以return出来的 如果回调函数里面没有return关键词 默认返回undefined
//return出来的值 就是相当于添加到一个新数组里面去了
var arr = [1,2,3,4,2];
var item = arr.map(function(val,key){
return val*2;
})
console.log(item); //[2,4,6,8,4];
for In遍历对象
一般不推荐遍历数组 因为for in遍历后不能保证顺序 而且原型链上面的属性和方法也会遍历到
因此一般常用来遍历非数组的对象并且使用
for In得到的是对象的key
for of得到的是对象的value