JS常用方法整理-遍历对象
2018-02-23 本文已影响89人
love丁酥酥
1. 简介
JS中经常需要对对象的属性进行遍历,下面我们来总结一下JS遍历对象属性的几种方法。
2. for...in...
for...in...循环会遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
// demo2
function SuperType() {
this.superVal = 'super';
};
SuperType.prototype.saySuperVal = function () {
console.log(this.superVal);
};
function SubType() {
this.subValOne = 'subOne';
this.subValTwo = 'subTwo';
};
SubType.prototype = new SuperType();
SubType.prototype.saySubValOne = function () {
console.log(this.subValOne);
};
var obj = new SubType();
Object.defineProperty(obj, 'notEnum', {
value: 'notEnum',
enumerable: false
});
for (let key in obj) {
console.log(`${key}:${obj[key]}`);
}
// subValOne:subOne
// subValTwo:subTwo
// superVal:super
/* saySubValOne:function () {
console.log(this.subValOne);
}*/
/* saySuperVal:function () {
console.log(this.superVal);
}*/
3.Object.entries()
Object.keys()方法接收一个对象为参数,返回该对象自身可枚举属性的键值对数组,其排列与使用for...in...循环循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
// 接demo2
console.log(Object.entries(obj)); // [["subValOne", "subOne"], ["subValTwo", "subTwo"]]
4. Object.keys()
Object.keys()方法接收一个对象为参数,返回一个数组,包含该对象自身的(不含继承的)可枚举属性的key值(不含Symbol属性)。
// 接demo2
console.log(Object.keys(obj)); // ["subValOne", "subValTwo"]
5. Object.values()
Object.values()方法接收一个对象为参数,返回一个数组,包含该对象自身的(不含继承的)可枚举属性得value值(不含Symbol属性)。
// 接demo2
console.log(Object.values(obj)); // ["subOne", "subTwo"]
6. Object.getOwnPropertyNames()
Object.getOwnPropertyNames()方法接收一个对象为参数,返回一个数组,包含该对象自身的所有属性(不含Symbol属性,但是包含不可枚举属性)
// 接demo2
Object.getOwnPropertyNames(obj); // ["subVal", "notEnum"]
7. Object.getOwnPropertySymbols()
Object.getOwnPropertySymbols()方法接收一个对象为参数,返回一个数组,包含该对象自身的所有Symbol属性。
8. Reflect.ownKeys()
Reflect.ownKeys()方法接收一个对象为参数,返回一个数组,包含该对象自身的所有属性(包含Symbol和不可枚举属性)。
注:7,8涉及到ES6新增类型Symbol,我会在ES6知识中详细讲解。
参考
如何遍历JS对象中所有的属性 包括enumerable=false的属性?
javaScript遍历对象、数组总结
【探秘ES6】系列专栏(八):JS的第七种基本类型Symbols
MDN-Object