ES6入门(6)对象的扩展

2019/03/04 12:09 下午 posted in  ES6

ES6中对象的扩展

对象的简介方式

    let  name="matrix",age=100;
    let school={name,age};
    let str = "name";
    let obj = {
        fn(){},
        // fn:function(){}
        // 属性名都是字符串 ,属性名使用[] 里面可以写变量
        [str]:name,
        ["my"+str]:name
    }

##Objectf方法的扩展

    // Object() 将参数变成对象
    console.log(Object(1)); // Number
    console.log(Object(true)); // Boolean

    // Object()
    console.dir(Object); //

    // Object.is判断 两个值是否相等
    // === NaN跟NaN不等  -0===0 true
    // 其他的跟 === 一致
    console.log(NaN === NaN); // false
    console.log(-0===0);    // true
    console.log(Object.is(NaN, NaN)); // true
    console.log(Object.is(-0,0)); // false

    // Object.assign 合并对象
    // Object.assign(obj1,obj2); 将obj2合并到obj1上,返回obj1
    let obj1 = {name:"matrix"};
    let obj2 = {age:10};
    console.log(Object.assign(obj1, obj2)); // {name: "matrix", age: 10}
    console.log(obj1); // {name: "matrix", age: 10}

    // ES7 中提供了对象的扩展运算符...

    let school = {...obj1,...obj2};
    console.log(school); // {name: "matrix", age: 10}


    // Object.getOwnPropertyDescriptor 获取一个对象中某个属性的描述
    console.log(Object.getOwnPropertyDescriptor("123", "length"));
    // 字符串的length 不可以修改 字符串中的方法不可以改变原字符串的
    let str1 = "123";
    str1.length = 0;
    console.log(str1);

    /**
     * configurable: false   是否可以配置  可以删除这个属性
         enumerable: false   是否可以枚举
         value: 3
         writable: false     是否可修改
         __proto__: Object
     */

    // Object.keys();  返回值是一个数组, [所有可枚举的属性]
    console.log(Object.keys(school)); //  ["name", "age"]

    // Object.values();返回值是一个数组, [所有可枚举的属性的值]
    console.log(Object.values(school)); // ["matrix", 10]

    // Object.entries();返回值是一个数组,[每一项[键,值]]
    console.log(Object.entries(school)); // [["name", "matrix"],["age", 10]]

对象的set和get

    let obj = {
        _name:"AA",
        get name(){
            // 只要通过obj获取name属性就会触发这个函数
            // 这里可以通过return返回值
            console.log(1);
            return this._name;
        },
        set name(val){
            //  只要通过obj给name属性设置值就会触发这个set函数
            console.log(2);
            this._name = val;
        }
    };
    console.log(obj.name);
    obj.name="matrix";
    console.log(obj.name);