es6学习笔记(七)对象的扩展
1.属性的简洁表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
2、属性名表达式
【】
表达式还可以用于定义方法名。
注意,属性名表达式与简洁表示法,不能同时使用,会报错。
属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object],
3、方法的name属性
(1)方法的name属性返回函数名(即方法名)。
(2)对象的方法使用了取值函数(getter)和存值函数(setter),则name属性不是在该方法上面,而是该方法的属性的描述对象的get和set属性上面,返回值是方法名前加上get和set
(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:
目前,有四个操作会忽略enumerable为false的属性。
for...in循环:只遍历对象自身的和继承的可枚举的属性。Object.keys():返回对象自身的所有可枚举的属性的键名。JSON.stringify():只串行化对象自身的可枚举的属性。Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
属性的遍历
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、对象的扩展运算符
浙公网安备 33010602011771号