es6-8 对象扩展

简洁表示

{
    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'}
}
原文地址:https://www.cnblogs.com/helzeo/p/11814046.html