简洁表示
{ let a = 1; let b = 2; // es5 let es5 = { a: a, b: b } // es6 let es6 = { a, b } console.log(es5, es6); // {a: 1, b: 2} {a: 1, b: 2} // 对象中有方法 let es5_method = { hello: function () { console.log('es5 hello') } } let es6_method = { hello () { console.log('es6 hello') } } es5_method.hello(); // es5 hello es6_method.hello(); // es6 hello }
属性表达式
如果 key 需要根据变量变化, es6 可以直接给 key 赋值
{ let a = 'b' let es5_obj = { a: 'c' } let es6_obj = { [a]: 'c' } console.log(es5_obj) // {a: "c"} console.log(es6_obj) // {b: "c"} }
Object新增方法
{ // 判断两个值是否相等, 跟三个等号在功能上是一样的 console.log(Object.is('abc', 'abc')); // true console.log(Object.is('1', 1)); // false console.log(Object.is([], [])); // false 数组是引用类型, 严格来讲两个数组引用的是不同地址 console.log(Object.is({}, {})); // false 对象是引用类型, 严格来讲两个对象引用的是不同地址 // 拷贝对象 Object.assign 是浅拷贝, 只修改引用地址, 而不是把所有值拷贝下来 // PS: 拷贝的是只有自身对象的属性, 如果这个对象有继承, 不会拷贝继承的属性, 也不能拷贝这个对象中不可枚举的属性 console.log('拷贝', Object.assign({a: 'a'}, {b: 'b'})); // {a: "a", b: "b"} // Object.entries() Object.keys() Object.values() 跟数组用法一致 let test = {k: 123, o: 456} for (let [key, value] of Object.entries(test)) { console.log(key, value); // k-123 o-456 } }
扩展运算符
{ let {a, b, ...c} = {a: 'aaa', b: 'bbb', c: 'ccc', d: 'ddd'} console.log(a, b, c) // aaa bbb {c: 'ccc', d: 'ddd'} }