ECMAScript6 入门 对象的扩展

对象的扩展

1:属性的简洁表示
(也就是说当对象的属性和值同名时,可以缩写为一个)

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}

// 等同于
const baz = {foo: foo};

方法简写
const o = {
  method() {
    return "Hello!";
  }
};

// 等同于

const o = {
  method: function() {
    return "Hello!";
  }
};


2:属性名表达式
(可以使用表达式定义对象的key)

已知定义对象的属性方法
// 方法一
obj.foo = true;

// 方法二
obj['a' + 'bc'] = 123;

但是使用字面量方式定义对象(使用大括号)的话,只能用上面方法一
var obj = {
  foo: true,
  abc: 123
};

ES6支持
let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123
};

表达式还可以定义方法名
let obj = {
  ['h' + 'ello']() {
    return 'hi';
  }
};

obj.hello() // hi

3:方法的name属性
函数的name属性,返回函数名

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

4:属性的可枚举性和遍历
对象的每个属性都存在一个描述对象,用来控制该属性的行为。
Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象
enumerable表示该对象是否可以枚举

以下四个操作都会忽略对象的不可枚举属性
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:super关键字
this 关键字总是指向函数所在的当前对象
(
    关联知识点
    1:普通函数中this与函数定义时无关,只与函数执行时所在的对象有关
    2:箭头函数中的this执行定义函数时所处的对象
)
super 指向当前对象的原型对象

 

对象新增API

1:Object.is()
比较两个值是否相等,与严格运算符===的行为基本一致
区别:+0 不等于-0 NaN 等于自身了

2:Object.assign()
用于对象合并 将源对象source可枚举属性,复制到目标对象
(这种方法属于浅拷贝,关于对象拷贝的相关,可参考我写的另外一篇对象的拷贝)

3:Object.getOwnPropertyDescriptors()
返回对象的某个属性的描述对象

4:Object.getOwnPropertyDescriptors()
返回指定对象所有自身属性的描述对象,不包含继承的属性

5:对象的继承是通过原型链实现
用来读取设置当前对象的prototype对象
Object.setPrototypeOf()
Object.getPrototypeOf()

额外知识点:__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()

6:Object.keys()
返回值是一个数组,成员是参数对象的所有可遍历的属性的key(不包含继承)

7:Object.values()
返回值是一个数组,成员是参数对象的所有可遍历的属性的value(不包含继承)

8:Object.entries()
返回值是一个数组,成员是参数对象的所有可遍历的属性的key 和 value(不包含继承)

9:Object.fromEntries()
Object.entries的逆操作

 

posted @ 2019-09-25 16:18  初心不负  阅读(198)  评论(0编辑  收藏  举报