zoukankan      html  css  js  c++  java
  • 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,
    })
    

      

     
    放弃安逸,持续努力——成长
  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/14823854.html
Copyright © 2011-2022 走看看