• Javascript中Object常用方法学习


    1、Object.assign 函数(对象)(JavaScript)

    将来自一个或多个源对象中的值复制到一个目标对象。语法: Object.assign(target, ...sources ); 

    此函数返回目标对象。可枚举自有属性从源对象复制到目标对象。可使用此函数合并或克隆对象。null 或 undefined 源被视为空对象一样对待,不会对目标对象产生任何影响。

    let obj1 = {
         name: 'xiaoming'
    }
    let obj2 = {
        age: '23'
    }
    let obj3 = Object.assign(obj1,obj2)
    let obj4 = Object.assign({},obj1)//克隆了obj1对象
    console.log(obj3)//{name: "xiaoming", age: "23"}
    console.log(obj4)//{name: "xiaoming", age: "23"}
    console.log(obj1)//{name: "xiaoming", age: "23"}。obj1发生改变是因为obj2赋给了obj1
    console.log(obj2)//{age: "23"}

    方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。

    let obj5 = {
      number: 6,
      name: 'zengfp',
      fn: {
        sum: 10
      }
    }
    let obj6 = Object.assign(obj1,obj5)
    console.log(obj6)//{name: "zengfp", age: "23", number: 6, fn: {…}}
    console.log(obj1)//{name: "zengfp", age: "23", number: 6, fn: {…}}
    对同名属性name进行了替换

    2、Object.create 函数 (JavaScript)。创建一个具有指定原型且可选择性地包含指定属性的对象。语法: Object.create(prototype, descriptors) 

    若要停止原型链,可以使用采用了 null prototype 参数的函数。  所创建的对象将没有原型。

    let newObj = Object.create(null, {
                size: {
                    value: "large",
                    enumerable: true
                },
                shape: {
                    value: "round",
                    enumerable: true
                }
     });
    console.log(newObj)//{size: "large", shape: "round"}
    console.log(Object.getPrototypeOf(newObj))//null

    创建一个具有与 person 对象相同的内部原型的对象

          let person = {
                 name: 'zengfp',
                 age: 25
             }
             let obj = Object.create(person,{
                 z: {
                     value: 8
                 }
             })
             console.log(obj)//{z:8}
             console.log(Object.getPrototypeOf(obj))//{name: "zengfp", age: 25}

    3、Object.defineProperties 函数 (JavaScript)。将一个或多个属性添加到对象,并/或修改现有属性的特性。语法: object.defineProperties(object, descriptors) 

    let obj = {}
    Object.defineProperties(obj,{
          newDataProperty: {
               value: 101,
               writable: true,
               enumerable: true,
               configurable: true
          },
          newAccessorProperty: {
                 set: function (x) {
                     this.newaccpropvalue = x;
                 },
                 get: function () {
                    return this.newaccpropvalue;
                 },
                 enumerable: true,
                 configurable: true
          }            
    })
    console.log(obj.newDataProperty)//101
    obj.newAccessorProperty = 20
    console.log(obj.newAccessorProperty)//20

     4、Object.defineProperty 函数 (JavaScript)。将属性添加到对象,或修改现有属性的特性。语法: Object.defineProperty(object, propertyname, descriptor) 

    可使用 Object.defineProperty 函数来执行以下操作:

    • 向对象添加新属性。  当对象不具有指定的属性名称时,发生此操作。  

    • 修改现有属性的特性。  当对象已具有指定的属性名称时,发成此操作。  

    描述符对象中会提供属性定义,用于描述数据属性或访问器属性的特性。  描述符对象是 Object.defineProperty 函数的参数

         let obj = {}
             Object.defineProperty(obj,'newDataProperty',{
                    value: 101,
                    writable: true,
                    enumerable: true,
                    configurable: true
             })
             obj.newDataProperty = 88
             console.log(obj.newDataProperty)//88

     

     5、Object.is 函数 (JavaScript)。返回一个值,该值指示两个值是否相同。语法: Object.is(value1, value2) 

    与 = = 运算符不同,Object.is 在测试值时不会强制任何类型。Object.is 应用的比较类似于 === 运算符所应用的比较,区别在于 Object.is 将 Number.isNaN 视作与 NaN 相同的值。它还将 + 0 和-0 视作不同值。

          let obj = {
                 x: 5,
                 y: 6
             }
             let obj1 = {
                 x: 5,
                 y: 8
             }
          let obj2 = {
            x:'5',
            y: 8
          }
    console.log(Object.is(obj.x,obj1.x))
    //true
         console.log(Object.is(obj2.x,obj1.x))//false

    6、Object.keys 函数 (JavaScript)。返回对象的可枚举属性和方法的名称。语法: Object.keys(object) 。返回一个数组,其中包含对象的可枚举属性和方法的名称。

          let obj = {
                 x: 5,
                 y: 6,
                 name: 'zengf'
             }
             let keys = Object.keys(obj)
             console.log(keys)// ["x", "y", "name"]

     

    7、Object.entries()。该方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for .... in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)

    const obj = { foo: 'bar', baz: 42 };
    console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
    
    // array like object
    const obj = { 0: 'a', 1: 'b', 2: 'c' };
    console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
    
    // array like object with random key ordering
    const anObj = { 100: 'a', 2: 'b', 7: 'c' };
    console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
    
    // getFoo is property which isn't enumerable
    const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
    myObj.foo = 'bar';
    console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]
    
    // non-object argument will be coerced to an object
    console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]
    
    // iterate through key-value gracefully
    const obj = { a: 5, b: 7, c: 9 };
    for (const [key, value] of Object.entries(obj)) {
      console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
    }
    
    // Or, using array extras
    Object.entries(obj).forEach(([key, value]) => {
    console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
    });

     参考网址:https://msdn.microsoft.com/zh-cn/library/k6xhc6yc(v=vs.94).aspx

  • 相关阅读:
    白盒测试笔记之:Junit 单元测试以及测试覆盖率
    Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页
    一位普通测试人2018年简单回顾
    Web API学习笔记(Python实现)
    web安全测试--sql注入攻击
    电源分配系统及电源完整性
    FPGA Timing笔记
    使用arm开发板搭建无线mesh网络(二)
    使用arm开发板搭建无线mesh网络(一)
    arm tiny6410双网卡桥接问题
  • 原文地址:https://www.cnblogs.com/zengfp/p/9878169.html
Copyright © 2020-2023  润新知