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的逆操作
不忘初心,不负梦想