for…in
for(var i in obj){
return false; //不为空
}
return true; //为空
JSON.stringfy()
if(JSON.stringfy(obj) === '{}'){
return true;
}else{
return false;
}
Object.keys(obj) ES6
if(Object.keys(obj).length === 0){
return true;
}else{
return false;
}
遍历对象与数组常用方法比较与分析:
数组
var arr = [1,"34",89,"0"];
- for循环
- for-of (for of遍历的是数组元素值) IE浏览器不支持
var arr = [1,"34",89,"0"];
for(var value of arr){//for of 可以使用break;
if(value === "34"){
break;
}
console.log(value)
}
- forEach()
arr.forEach(function (value, index) {
console.log(value + " index:" + index);
});
forEach()缺点就是不可以在中间使用break和continue,否则控制台报错
arr.forEach(function(value){
if(value === "34"){
break;//直接报错
}
console.log(value)
})
- arr.map(function(item,index,array){}) (IE9+)
arr.map(function (item, index, array) {
console.log(item, index);
});
对象
-
for-in (for in遍历的是数组的索引(即键名))
-
jquery中
$.each(obj,function(){ .......... })
-
Object.keys(obj)与Object.values(obj)
// ie9+才支持
// Object.keys(obj);
console.log(Object.keys(obj))//返回一个对象索引值组成的数组: ["name", "age", "sex", "hobby"]
//ie浏览器不支持
console.log(Object.values(obj))//返回一个包含对象自身的所有可枚举属性值的数组,属性的顺序与通过手动循环对象的属性值所给出的顺序相同。。:["zs", "12", "male", "play"]
- Object.getOwnPropertyNames(obj) 返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性). ES6语法
console.log(Object.getOwnPropertyNames(obj))//["name", "age", "sex", "hobby"]
Object.getOwnPropertyNames(obj).forEach(function(key){
console.log(key,obj[key]);
});
/**
* name zs
* age 12
* sex male
* hobby play
*/
- Reflect.ownKeys(obj) 和 Object.getOwnPropertyNames(obj) 相似 (IE不支持)
Reflect.ownKeys(obj).forEach(function(key){
console.log(key,obj[key]);
});