ECMAScript-----(五)对象的扩展
属性名表达式
- 用途:允许表达式作为属性名、方法名,表达式需要写在方括号里
- 说明:
- 注意:属性名表达式时一个对象时,会自动将对象转为字符串
- 例子:
let obj = { [propKey]: true, ['a' + 'bc']: 123 };
let obj = { ['h' + 'ello']() { return 'hi'; } };
obj.hello()//会自动将对象转为字符串 //[keyA]和[keyB]得到的都是[object Object],所以[keyB]会把[keyA]覆盖掉,而myObject最后只有一个[object Object]属性。 const keyA = {a: 1}; const keyB = {b: 2}; const myObject = { [keyA]: 'valueA', [keyB]: 'valueB' }; myObject // Object {[object Object]: "valueB"}
Object.assign(target,source1,source2,...)
- 用途:用于对象的合并
- 说明:
- 注意:
- 参数需要是对象,非对象参数会自动转为对象
- target参数为undefined或null时,会因无法转为对象而报错
- source参数为undefined或null时,会因无法转为对象而被跳过,不会报错
- Object.assign()是浅拷贝,拷贝的对象的引用;只拷贝自身属性,不拷贝不可枚举的属性;
- 例子:
Object.assign(undefined) // 报错 let obj = {a: 1}; Object.assign(obj, undefined) === obj // true Object.assign(obj, null) === obj // true
var v1 = 'abc'; var v2 = true; var v3 = 10; var obj = Object.assign({}, v1, v2, v3); console.log(obj); // { "0": "a", "1": "b", "2": "c" } //因为只有字符串有可枚举属性
Object.keys()、Object.values()、Object.entries()
- 用途:
- 说明:Object.entries()可将对象转为真正的Map结构
- 注意:
- 例子: