美文网首页
JS学习笔记之对象属性遍历

JS学习笔记之对象属性遍历

作者: 叫我小徐 | 来源:发表于2018-08-14 17:23 被阅读0次

属性类型

JS中,对象的属性包括两类:自身属性(实例属性)以及继承属性(原型属性)。在这两类属性中,又有可枚举属性不可枚举属性之分。

// 自身属性
var obj = {
  name: '小明',
  age: 10
};

// 继承属性
var obj2 = Object.create(obj);
obj2.name    // 小明

// 不可枚举属性
var obj3 = {};
Object.defineProperty(obj3, 'name', {
  enumerable: false, // 默认为false
  value: '不可枚举'
})

遍历对象属性方法

对于对象属性的遍历,JS提供了以下几种方法:

  • Object.keys()
  • Object.getOwnPropertyNames()
  • for ... in

本文讨论的就是基于上述几种对象属性遍历的区别。

各遍历方法区别

话不多说,先弄点伪代码测试一下,如下:

function Person(name) {
  this.name = name;
}
Person.prototype.sex = 'male';
Person.prototype.introduce = function() {
  console.log(this.name + ': ' + this.sex);
};
// 定义一个不可枚举的原型对象属性
Object.defineProperty(Person.prototype, 'money', {
  value: 1000
});
var student = new Person('小明');
// 定义一个不可枚举的实例属性
Object.defineProperty(student, 'age', {
  value: 10
});
上面代码模拟了一个简单的原型链,如果看的不清楚,可以看下面的原型链图: 对象属性遍历原型.png

现在,开始测试各个方法的结果:

  1. Object.keys(student):['name']
  2. Object.getOwnPropertyNames(student): ['name', 'age']
  3. for(var key in student): name, sex, introduce

根据原型图跟上面的结果,可以得出以下总结:

  1. Object.keys(): 获取的是可枚举的实例属性
  2. Object.getOwnPropertyNames(): 获取的是所有实例属性(枚举+不可枚举)
  3. for ... in: 获取的是实例和原型链上可枚举属性

需要特别注意的是,ES6中引入了Symbol这个新的数据类型,该类型不管是否可枚举,都无法通过上述3中方法获得。我们可一个通过Object.getOwnPropertySymbols()获得。

相关文章

  • JS学习笔记之对象属性遍历

    属性类型 JS中,对象的属性包括两类:自身属性(实例属性)以及继承属性(原型属性)。在这两类属性中,又有可枚举属性...

  • JS常用方法整理-遍历对象

    1. 简介 JS中经常需要对对象的属性进行遍历,下面我们来总结一下JS遍历对象属性的几种方法。 2. for......

  • JS Tips

    遍历对象的所有属性 添加属性 给普通的 JS 对象添加属性: 但是对于 Mongodb 中的对象,不可直接添加属性...

  • 2018-07-25 学习总结

    1.js对象 造器函数内部定义对象的方法 循环遍历对象属性(for ....in 循环遍历键) 2.indexOf...

  • javascript对象的属性介绍

    本篇主要介绍JS中对象的属性,包括:属性的分类、访问方式、检测属性、遍历属性以及属性特性等内容。 属性:对象的成员...

  • Vue响应式原理

    在js对象传给data时,Vue将遍历这个对象中的属性,并用Object.defineProperty()将属性转...

  • 79-对象遍历

    什么是对象的遍历对象的遍历就是依次取出对象中所有的属性和方法 如何遍历一个对象?在JS中可以通过高级for循环来遍...

  • JS/jQuery 遍历对象属性

    each()方法能使DOM循环结构简洁,不容易出错。each()函数封装了十分强大的遍历功能,使用也很方便,它可以...

  • JS - 面向对象 - 属性遍历

    对象属性分类 对于属性遍历而言,可以将对象属性分为是否可枚举、是否为继承 两种 在 ary 数组中,可枚举属性是对...

  • 循环遍历数组 对象的方法

    entries() 遍历键值对 keys() 遍历键名 values() 遍历键值 对象------遍历对象(属性...

网友评论

      本文标题:JS学习笔记之对象属性遍历

      本文链接:https://www.haomeiwen.com/subject/ckuvbftx.html