Javascript对象可以看做是属性的集合,在开发时,我们经常会枚举(遍历)对象的属性。
我们可以使用以下方式进行判断:
1. for in: 会遍历对象中所有的可枚举属性(包括自有属性和继承属性)
2. Object.keys(): 会返回一个包括所有的可枚举的自有属性的名称组成的数组
3. Object.getOwnPropertyNames(): 会返回自有属性的名称 (不管是不是可枚举的)
下面我们对以上几种判断方法做简单的介绍:
1. for in
for in 会遍历对象中所有的可枚举属性(包括自有属性和继承属性)。举例如下:
<script>
// 创建一个实例对象
var o = Object.create({
name: 'neil'
});
// 给实例对象设置属性
o.age = 100;
// 给实例设置一个不可枚举的属性
Object.defineProperty(o, 'sex', {
value: '1',
enumerable: false
});
for (p in o) {
console.log(p); // 输出:name,age
}
</script>
从上面代码的运行结果可以看出,for in会遍历对象的自有和继承的可枚举属性。给对象o设置的不可枚举属性sex,没有被遍历到。
2. Object.keys()
Object.keys()方法会返回一个包括所有的可枚举的自有属性的名称组成的数组。举例如下:
<script>
// 创建一个实例对象
var o = Object.create({
name: 'neil'
});
// 给实例对象设置属性
o.age = 100;
// 给实例设置一个不可枚举的属性
Object.defineProperty(o, 'sex', {
value: '1',
enumerable: false
});
console.log(Object.keys(o)); // 输出:["age"];继承的name和自身不可枚举的sex属性没有返回
</script>
3. Object.getOwnPropertyNames()
Object.getOwnPropertyNames()方法会返回自有属性的名称组成的数组 (不管是不是可枚举的)。举例如下:
<script>
// 创建一个实例对象
var o = Object.create({
name: 'neil'
});
// 给实例对象设置属性
o.age = 100;
// 给实例设置一个不可枚举的属性
Object.defineProperty(o, 'sex', {
value: '1',
enumerable: false
});
console.log(Object.getOwnPropertyNames(o)); // 输出数组:["age","sex"]
</script>
在使用的过程中,我们经常会遍历对象的自有属性(并且自定义对象的属性基本都是可枚举的),用到最多的可能是Object.keys()。
欢迎分享交流,转载请注明出处:WithCoder » Javascript中枚举(遍历)对象属性的方法及其区别