es6学习笔记(七)对象的扩展

1.属性的简洁表示法

ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

2、属性名表达式

【】

表达式还可以用于定义方法名。

注意,属性名表达式与简洁表示法,不能同时使用,会报错。

属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object]

3、方法的name属性

 (1)方法的name属性返回函数名(即方法名)。

(2)对象的方法使用了取值函数(getter)和存值函数(setter),则name属性不是在该方法上面,而是该方法的属性的描述对象的getset属性上面,返回值是方法名前加上getset

(3)bind方法创造的函数,name属性返回bound加上原函数的名字;bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值

(4)Function构造函数创造的函数,name属性返回anonymous 

(5)如果对象的方法是一个 Symbol 值,那么name属性返回的是这个 Symbol 值的描述。:Symbol,表示独一无二的值

4、Object.is()

严格比较运算符(===)的行为基本一致,

不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

5、Object.assign()

方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false)。

属性名为 Symbol 值的属性,也会被Object.assign拷贝。

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

常见用途:

为对象添加属性

为对象添加方法

克隆对象

合并多个对象

为属性指定默认值

注意,由于存在浅拷贝的问题,DEFAULTS对象和options对象的所有属性的值,最好都是简单类型,不要指向另一个对象。否则,DEFAULTS对象的该属性很可能不起作用。

6、属性的可枚举和遍历

Object.getOwnPropertyDescription()

enumerate:

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

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

属性的遍历

1)for...in

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

(2)Object.keys(obj)

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

(3)Object.getOwnPropertyNames(obj)

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

(4)Object.getOwnPropertySymbols(obj)

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

(5)Reflect.ownKeys(obj)

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

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

  • 首先遍历所有数值键,按照数值升序排列。
  • 其次遍历所有字符串键,按照加入时间升序排列。
  • 最后遍历所有 Symbol 键,按照加入时间升序排列。

7、Object.getOwnPropertyDescriptors()

8、__proto__、Object.setPrototypeOf(),Object.getPrototypeOf()

9、super关键字

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

super关键字表示原型对象时,只能用在对象的方法之中,用在其他地方都会报错。

10、object.keys(),Object.Values(),Object.entries()

Object.keys():返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名

11、对象的扩展运算符

 

posted @ 2018-07-19 16:55  tutu_python  阅读(98)  评论(0)    收藏  举报