ECMAScript6 笔记(四):对象的扩展

  • A+
所属分类:前端

对象(object) 是 JavaScript 最重要的数据结构。ES6 对它进行了重大升级。

简写

ES6 中如果,将变量或函数放入大括号中会得到与变量或函数同名的对象,且该对象的值为该变量或函数本身。

属性名表达式

但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用 . (标识符)定义属性,如:

ES6 后可以通过属性名表达式来获取对象的属性值:

属性的可枚举性

描述对象的 enumerable 属性,称为“可枚举性”,如果该属性为 false,就表示某些操作会忽略当前属性。

目前,有四个操作会忽略 enumerablefalse 的属性。

  1. for...in循环:只遍历对象自身的和继承的可枚举的属性。
  2. Object.keys():返回对象自身的所有可枚举的属性的键名。
  3. JSON.stringify():只串行化对象自身的可枚举的属性。
  4. Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。

这四个操作之中,前三个是 ES5 就有的,最后一个 Object.assign() 是 ES6 新增的。其中,只有 for...in 会返回继承的属性,其他三个方法都会忽略继承的属性,只处理对象自身的属性。实际上,引入“可枚举”(enumerable)这个概念的最初目的,就是让某些属性可以规避掉 for...in 操作,不然所有内部属性和方法都会被遍历到。比如,对象原型的 toString方法,以及数组的 length 属性,就通过“可枚举性”,从而避免被 for...in 遍历到。

属性的遍历

  1. for...in

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

  1. Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

  1. Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

  1. Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

  1. Reflect.ownKeys(obj)

Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

super

super 指向当前对象的原型对象。

ultravires

发表评论

您必须才能发表评论!