JS中遍历对象属性的几种方式

  • Post author:
  • Post category:其他


为了彻底搞定对象遍历的方法,我不得不翻出我的

红宝书

,找到“面向对象的程序设计—创建对象”的内容,仔细的研究了一下(起因来源于,突发奇想,想彻底搞懂原型链相关的知识,结果发现了对象属性遍历的几种方式,O哈哈~)

我们先创建一个对象

function Person() {
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function () {
  alert(this.name);
};

let person = new Person();
person.like = 'apple'


peson

实例上有

like

属性,其他的

name 、age 、job 、sayName

为原型上的属性



1.

Object.keys

这个方法接收一个对象作为参数,返回一个包含所有

可枚举实例属性

的字符串数组


  • Object.keys()

    :返回包含对象键名的数组

  • Object.values()

    :返回包含对象键值的数组

  • Object.entries()

    :返回包含对象键名和键值的数组



2.

Object.getOwnPropertyNames()

如果你想要得到

所有实例属性



无论它是否可枚举

,都可以使用

Object.getOwnPropertyNames()

方法。



3.

for-in

循环



for-in

循环时,返回的是所有能够通过对象

访问的、可枚举

的属性,其中既包括存在于

实例中

的属性,也包括存在于

原型中

的属性



4. 代码

  • 遍历Person.prototype对象
console.log('=========遍历Person.prototype对象===========')
// 方法一
var keys1 = Object.keys(Person.prototype);
console.log('keys1: ', keys1); // keys1:  (4) ['name', 'age', 'job', 'sayName']
// 方法二
var keys2 = Object.getOwnPropertyNames(Person.prototype);
console.log('keys2: ', keys2); // keys2:  (5) ['constructor', 'name', 'age', 'job', 'sayName']
// 方法三
let keys3 = []
for (var prop in Person.prototype) {
  keys3.push(prop)
}
console.log('keys3: ', keys3); // keys3:  (4) ['name', 'age', 'job', 'sayName']

注意遍历Person.prototype时,结果中包含了不可枚举的

constructor

属性

  • 遍历person对象
console.log('=========遍历person对象===========')
// 方法一
var personKeys1 = Object.keys(person);
console.log('personKeys1: ', personKeys1); // personKeys1:  ['like']
// 方法二
var personKeys2 = Object.getOwnPropertyNames(person);
console.log('personKeys2: ', personKeys2); // personKeys2:  ['like']
// 方法三
let personKeys3 = []
for (var prop in person) {
  personKeys3.push(prop)
}
console.log('personKeys3: ', personKeys3); // personKeys3:  (5) ['like', 'name', 'age', 'job', 'sayName']

在这里插入图片描述



版权声明:本文为weixin_47180815原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。