对象的扩展
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的扩展相关的知识,希望对你有一定的参考价值。
1、属性的简洁表示法
-- 属性:直接写变量。属性名为变量名, 属性值为变量的值
module.exports = { getItem, setItem, clear }; // 等同于 module.exports = { getItem: getItem, setItem: setItem, clear: clear };
--方法
var o = { method() { return "Hello!"; } }; // 等同于 var o = { method: function() { return "Hello!"; } };
2、属性名表达式
ES6 允许字面量定义对象时,用表达式作为对象的属性名
let propKey = ‘foo‘; let obj = { [propKey]: true, [‘a‘ + ‘bc‘]: 123 };
3、Object.is()
在所有环境中,只要两个值是一样的,它们就应该相等。类似于===
Object.is(‘foo‘, ‘foo‘) // true Object.is({}, {}) // false
4、Object.assign()
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。第一个参数是目标对象,后面的参数都是源对象。
var target = { a: 1 }; var source1 = { b: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3}
-- 如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
-- Object.assign方法实行的是浅拷贝,而不是深拷贝
var obj1 = {a: {b: 1}}; var obj2 = Object.assign({}, obj1); obj1.a.b = 2; obj2.a.b // 2
用途:
-- 为对象添加属性
class Point { constructor(x, y) { Object.assign(this, {x, y}); } }
-- 合并多个对象
const merge = (target, ...sources) => Object.assign(target, ...sources);
-- 为属性指定默认值
const DEFAULTS = { logLevel: 0, outputFormat: ‘html‘ }; function processContent(options) { options = Object.assign({}, DEFAULTS, options); console.log(options); // ... }
5、Object.keys(),Object.values(),Object.entries()
Object.keys() 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
Object.values() 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
Object.entries 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
6、拓展运算符
--扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
let z = { a: 3, b: 4 }; let n = { ...z }; n // { a: 3, b: 4 }
以上是关于对象的扩展的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象