美文网首页
属性的可枚举性和遍历

属性的可枚举性和遍历

作者: jackie季 | 来源:发表于2018-09-27 18:05 被阅读0次

可枚举性

对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

let obj = { foo: 123 };
Object.getOwnPropertyDescriptor(obj, 'foo')
//  {
//    value: 123,
//    writable: true,
//    enumerable: true,
//    configurable: true
//  }

描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示某些操作会忽略当前属性。
目前,有四个操作会忽略enumerable为false的属性:
for...in循环:只遍历对象自身的和继承的可枚举的属性。
Object.keys():返回对象自身的所有可枚举的属性的键名。
JSON.stringify():只串行化对象自身的可枚举的属性。
Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
其中,只有for...in会返回继承的属性,其他三个方法都会忽略继承的属性,只处理对象自身的属性。引入“可枚举”(enumerable)这个概念的最初目的,就是让某些属性可以规避掉for...in操作,不然所有内部属性和方法都会被遍历到。
大多数时候,我们只关心对象自身的属性。所以,尽量不要用for...in循环,而用Object.keys()代替。

遍历方法

(1)for...in
for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
(4)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

相关文章

  • 对象的扩展

    1. 对象属性的可枚举性和遍历 「enumerable」属性成为「可枚举性」,如果该属性为false,有一些操作会...

  • 属性的可枚举性和遍历

    可枚举性 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwn...

  • 对象遍历方法简记

    1.for … in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol...

  • JavaScript对象的可枚举属性学习

    可枚举属性和不可枚举属性是什么 所谓的可枚举就是可遍历的意思,也就是说对象的属性是否能够通过遍历得到。即通过for...

  • 2019-05-06 遍历对象的属性

    1:可枚举和不可枚举 对象的属性分为可枚举和不可枚举,它们是由属性的enumerable值决定。 2:遍历 对象遍...

  • 高程阅读笔记——对象

    遍历对象的几种方法 for in 会遍历自身以及原型链上所有可枚举属性 Object.keys 遍历自身可枚举属性...

  • Javascript中的遍历

    对象遍历 方法是否可遍历不可枚举属性是否可遍历Symbol属性是否可原型链属性Object.keys-------...

  • for-in和Object.keys对比

    for-in会遍历原型链上的属性,而且是可枚举的属性。 Object.keys只会遍历自身的属性,而且是可枚举的属...

  • 可枚举属性和不可枚举属性(for...in循环和Objec.ke

    for...in循环是 遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性Object.keys()只是遍历自...

  • 【JavaScript】遍历对象属性

    for in; 遍历对象的可枚举属性,包括自有属性、继承自原型的属性 Object.keys(); 遍历对象的可枚...

网友评论

      本文标题:属性的可枚举性和遍历

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