/*
判断一个对象是不是数组:几种办法
typeof无法区分对象和数组:typeof [] object
typeof {} object
1. var obj={};var obj=[];var obj=function(){};
obj instanceof 构造函数名/类型名(Array,Function,...)
2. Array.prototype.isPrototypeof(obj)
*3. Object.prototype.toString.call(obj) [object Array]
4. ES5: Array.isArray(obj)
obj是数组,则返回true,否则返回false!
判断并实现自定义isArray方法:
*/
//判断Array的isArray是否有效,如果无效
if(!Array.isArray){
// 在Array上添加isArray方法,接受一个参数obj
Array.isArray=function(obj){
// var result=强行用obj调用原始toString方法
var result=
Object.prototype.toString.call(obj);
//"[object XXXXX]"
// 如果result中能找到"Array"
if(result.indexOf("Array")!=-1){//找到了
return true;//返回true
}else{//否则
return false;//返回false
}
}
}
document.write(Array.isArray({})+"<br>");//false
document.write(Array.isArray([])+"<br>");//true
//迭代API:
//every:判断数组中所有元素是否都为偶数
var arr1=[1,2,3,4,5];
var arr2=[2,4,6,8,10];
console.log(
arr1.every(function(value,index,array){
return value%2==0;
})
);//false
console.log(
arr2.every(function(value,index,array){
return value%2==0;
})
);//true
/* some: 判断数组中是否*包含*满足条件的元素
只要有一个满足就返回true
只有都不满足时才返回false*/
console.log(
arr1.some(function(value,index,array){
return value%2==0;
})
);//true
console.log(
arr2.some(function(value,index,array){
return value%2!=0;
})
);//false
//forEach: 对原数组中每个元素执行相同操作
var arr=[1,2,3,4,5];
console.log(String(arr));//1,2,3,4,5
arr.forEach(function(value,index,array){
array[index]*=2;
});
/**map: 将原数组中每个元素,经过加工,生成一个*新数组*
var newArr=arr.map(function(value,index,array){
return 要放入新数组的值
})*/
var newArr=arr.map(function(value,index,array){
return value*2;
});
console.log(String(arr));//2,4,6,8,10
console.log(String(newArr));//4,8,12,16,20
//filter: 查找数组中符合条件的元素,组成新数组
var subArr=arr.filter(function(value,index,array){
return value%2==0;
});
console.log(String(subArr));//2,4,6,8,10
//reduce: 汇总数组中每个元素
var result=arr.reduce(
function(prev,value,index,array){
return prev+value;
},
100
);
console.log(result);//130