javascript中的对象属性迭代

文章目录

    • 创建案例对象
    • 对象属性的迭代有以下这几种方式:
      • for-in
      • Object.Keys()
      • Object.values()
      • Object.entries()
      • Object.getOwnPropertyNames()
    • 最后再说一下`in`操作符

创建案例对象

先通过继承来创建对象:

function Parent (name, age) {
	this.name = name || 'parent'
    this.age = age || 60
}
function Self (name, age, gender) {
    Parent.call(this, name, age)
    this.gender = gender
}
Self.prototype = new Parent()
Self.prototype.constructor = Self

let self = new Self('self', 20, 'M')

// 设置不可枚举属性birthDate
Object.defineProperty(self, 'birthDate', {
	configurable: true,
    enumerable: false,
    writable: true,
    value: '2019-01-16'
})

在控制台输出self对象:

javascript中的对象属性迭代_第1张图片

对象属性的迭代有以下这几种方式:

  1. for-in

    迭代对象可枚举的属性名,包括原型链上的属性

    重点:

    1. 可枚举的属性
    2. 包括原型链上的属性
    for (let key in self) {
        console.log(key)
    }
    // name
    // age
    // gender
    // constructor
    

    原型链上的属性constructor被打印出来

  2. Object.Keys()

    返回对象自身可枚举属性名组成的数组,不包括原型链上的属性

    重点:

    1. 返回对象自身可枚举属性名组成的数组
    2. 不包括原型链上的属性
    Ojbect.keys(self)
    // ['name', 'age', 'gender']
    
  3. Object.values()

    返回对象自身可枚举属性值组成的数组,不包括原型链上的属性

    重点:

    1. 返回对象自身可枚举属性值组成的数组
    2. 不包括原型链上的属性
    Ojbect.values(self)
    // ['self', 20, 'M']
    
  4. Object.entries()

    返回对象自身可枚举属性的键值对数组,不包括原型链上的属性

    重点:

    1. 返回对象自身可枚举属的键值对数组
    2. 不包括原型链上的属性
    Object.entries(self)
    // [['name', 'self'], ['age', 20], ['gender', 'M']]
    

    返回的是一个二维数组, 属性名在前,属性值在后

  5. Object.getOwnPropertyNames()

    返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组,不包括原型链上的属性

    重点:

    1. 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性为名称的属性)组成的数组
    2. 不包括原型链上的属性
    Object.getOwnPropertyNames(self)
    // ['name', 'age', 'gender', 'brithDate']
    

    不可枚举属性名birthDate被打印出来了

最后再说一下in操作符

判断给定属性是否属于对象属性,不管该属性存在于实例还是原型中

'name' in self // true
'age' in self // true
'gender' in self // true
'birthDate' in self // true
'constructor' in self // true
'valueOf' in self // true

可以确定是,所有的属性(包括原型链上)都可通过in操作符来判断

你可能感兴趣的:(javascript)