• ES6-11学习笔记--对象的扩展


    属性简洁表示法
    属性名表达式
    Objec.is()
    扩展运算符 与 Object.assign()
    in
    对象的遍历方式
     
    属性简洁表示法:
    如果属性key跟变量名一直,可简写
    let name = '张三'
    let age = 18
    let people = {
        name,
        age
    }
    console.log(people);
    

      

    属性名表达式:
    当我们想key是变量的时候,就需要使用属性名表达式
    let s = 'school'
    let obj = {
        [s]: '清华'
    }
    console.log(obj); // 此时obj的key[s],就变成school
    

      

    对象里面function也可以进行简写
    let obj2 = {
        name: '张三',
        study() {
            console.log(this.name + '正在学习');
        }
    }
    obj2.study()
    

      

    Objec.is:用来判断两个值是否相等,且判断类型
    那么跟===全等有什么区别?
    console.log(2 === '2'); // false
    console.log(Object.is(2, '2')); // false
    console.log(NaN === NaN); // false
    console.log(Object.is(NaN, NaN)); // true
    console.log(+0 === -0); // true
    console.log(Object.is(+0, -0)); // false
    

      

    两个对象的比较并不是比较对象的内容,而是比较栈内存里面的引用地址
    let obj3 = {}
    let obj4 = {}
    console.log(obj3 === obj4); // false
    console.log(Object.is(obj3, obj4)); // false
    let obj5 = obj3
    console.log(obj3 === obj5); // true
    console.log(Object.is(obj3, obj5)); // true
    

      

    扩展运算符:
    let x = {
        a: 1,
        b: 2
    }
    let y = {
        ...x
    }
    console.log(y);
    

      

    Object.assign:将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
    语法:Object.assign(target, ...sources)
    let z = {}
    Object.assign(z, x)
    console.log(z);
    

      

    in:用来判断对象是否包含某属性
    console.log('a' in x); // true
    console.log('aa' in x); // false
    

      

    in也能用于数组,但是用在数组是判断当前索引下面是否有值
    let arr = [1, 2, 3]
    console.log(2 in arr); // true,索引2位置有数字3
    console.log(3 in arr); // false,索引3位置没有值
    

      

    对象的遍历:
    let objEach = {
        name: '张三',
        age: 18,
        school: '清华'
    }
    // 方法一
    for (let key in objEach) {
        console.log(key, objEach[key]);
    }
    // 方法二
    Object.keys(objEach).forEach(key => {
        console.log(key, objEach[key]);
    })
    // 方法三
    Object.getOwnPropertyNames(objEach).forEach(key => {
        console.log(key, objEach[key]);
    })
    // 方法四
    Reflect.ownKeys(objEach).forEach(key => {
        console.log(key, objEach[key]);
    })
    

      

    -------------------------------------------ES8对象的扩展---------------------------------------------------------

    Object.values()
    Object.entries()
    const obj = {
        name: '张三',
        age: 18
    }
    
    console.log(Object.keys(obj));
    console.log(Object.values(obj));
    
    console.log(Object.entries(obj));
    

      

    对象属性描述符
    Object.getOwnPropertyDescriptors()
        value:当前值
        writable:是否可以修改
        configurable:能否使用delete删除属性
        enumerable:是否能通过for in循环
    const desc = Object.getOwnPropertyDescriptors(obj)
    console.log(desc);
    

      

    Reflect.defineProperty可以设置对象这四个属性
    Reflect.defineProperty(obj, 'name', {
        value: '李四',
        writable: true,
        configurable: true,
        enumerable: true,
    })
    

      

     
    放弃安逸,持续努力——成长
  • 相关阅读:
    poj 3026 Borg Maze
    poj2828 Buy Tickets
    poj3264 Balanced Lineup
    高精度运算
    poj1035 Spell checker
    poj2318 TOYS 点积叉积理解
    求两直线交点的一般做法
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业07
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/14823854.html
Copyright © 2020-2023  润新知