在日常JS中用的比较多,总结参考一下,方便日常工作查看
对象遍历
for...in
循环遍历对象自身和继承的可枚举属性(不含Symbol属性)
let obj = {'0':'a','1':'b','2':'c','4':'e'};
Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
for(let key in obj){
console.log(key,obj[key]);
}
Object.keys+forEach
Object.keys返回键值数组,循环遍历对象自身(不含继承)的可枚举属性(不含Symbol属性)
let obj = {'0':'a','1':'b','2':'c','4':'e'};
Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
Object.keys(obj).forEach(function(key){
console.log(key,obj[key]);
});
补充:Object.values 获取到的是obj中的值数组:['a','b','c']
Object.getOwnPropertyNames+forEach
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)
let obj = {'0':'a','1':'b','2':'c','4':'e'};
Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
Object.getOwnPropertyNames(obj).forEach(function(key){
console.log(key,obj[key]);
});
Reflect.ownKeys(obj)+forEach
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举
let obj = {'0':'a','1':'b','2':'c','4':'e'};
Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
obj[Symbol("5")]='f'
Reflect.ownKeys(obj).forEach(function(key){
console.log(key,obj[key]);
});