• object常用的方法


    1,Object.assign()

    用于多个对象的复制,返回修改后的对象。若一个对象为空的话,那就是浅拷贝。

    第一个参数作为目标对象,是将后面一个对象参数,合并到前面一个对象参数。
    如果有相同的属性,后面的会对前面的进行覆盖。

    const target = { a: 1, b: 2 };
    const source = { b: 4, c: 5 };
    
    const returnedTarget = Object.assign(target, source);
    console.log(target);
    // expected output: Object { a: 1, b: 4, c: 5 }
    console.log(returnedTarget);
    // expected output: Object { a: 1, b: 4, c: 5 }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2,Object.create()

    用于创建一个新的对象,使用现有参数作为新创建对象的原型。

    const person = {
      isHuman: false,
      printIntroduction: function() {
        console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
      }
    };
    
    const me = Object.create(person);
    
    me.name = 'jjj' // 可以添加属性,在创建的对象上面。
    me.isHuman = true// 可以修改person带的属性
    me.printIntroduction() // 可以执行方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3,Object.defineProperties()

    Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

    Object.defineProperties(obj, props)
    
    • 1

    obj: 在其上定义或修改属性的对象。

    props:

    • value: 属性的值
    • writable:当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的value,才能被=改变。 默认为 false。
    • get:作为该属性的 getter 函数,如果没有 getter则为undefined。函数返回值将被用作属性的值。
    • set:作为属性的 setter 函数,如果没有 setter,则为undefined。函数将仅接受参数赋值给该属性的新值。 默认为 undefined
    • configurable: 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变, 默认为 false
    • enumerable:当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false。
    var obj = {};
    Object.defineProperties(obj, {
      'property1': {
        value: true,
        writable: true
      },
      'property2': {
        value: 'Hello',
        writable: false
      }
      // etc. etc.
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4,Object.defineProperty()

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。和上面类似,只是上面的方法可以一次创建多个属性,这个方法只能创建一个属性。

    Object.defineProperty(obj,prop,descriptor)
    
    • 1
    const object1 = {};
    Object.defineProperty(object1, 'property1', {
      value: 42,
      writable: false
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5,Object.prototype.hasOwnProperty()

    hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。

    常常的使用方式,就是和for in搭配使用,for in会遍历可枚举属性,原型上的属性也会遍历,因此可以用hasOwnProperty()这个方法来判断,当前属性是否是元素自身的属性。

    for (var name in buz) {
      if (buz.hasOwnProperty(name)) {
        console.log('this is fog (' +
          name + ') for sure. Value: ' + buz[name]);
      }
      else {
        console.log(name); // toString or something else
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    6, Object.keys()

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

    var arr = ['a', 'b', 'c'];
    console.log(Object.keys(arr)); // console: ['0', '1', '2']
    
    • 1
    • 2

    常常在Map对象中使用。

    7,Object.values()

    Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

    var obj = { foo: 'bar', baz: 42 };
    console.log(Object.values(obj)); // ['bar', 42]
    
    • 1
    • 2

    7,Object.prototype.toString()

    toString() 方法返回一个表示该对象的字符串。

    每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。
    默认情况下,toString() 方法被每个 Object 对象继承。
    如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。
    比如:

    var o = new Object();
    o.toString(); // 返回 [object Object]
    
    • 1
    • 2

    可以在对象中重写toString方法

    function Dog(name) {
      this.name = name;
    }
    const dog1 = new Dog('Gabby');
    Dog.prototype.toString = function dogToString() {
      return `${this.name}`;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8,Object.is()

    Object.is() 方法判断两个值是否为同一个值。

    Object.is() 方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:

    都是 undefined
    都是 null
    都是 true 或都是 false
    都是相同长度、相同字符、按相同顺序排列的字符串
    都是相同对象(意味着都是同一个对象的值引用)
    都是数字且

    • 都是 +0
    • 都是 -0
    • 都是 NaN
    • 都是同一个值,
    • 非零且都不是 NaN

    Object.is() 与 == 不同。== 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将 “” == false 判断为 true),而 Object.is 不会强制转换两边的值。

    Object.is() 与 === 也不相同。差别是它们对待有符号的零和 NaN 不同,例如,=== 运算符(也包括 == 运算符)将数字 -0 和 +0 视为相等,而将 Number.NaN 与 NaN 视为不相等。

  • 相关阅读:
    Windows11配置SQL Server Managment Studio 18(SSMS)
    websocket通信
    二十九、《大数据项目实战之用户行为分析》Spark3.X分布式集群搭建
    战略进攻能力的重要性,要远远高于战略防守能力
    分布式搜索引擎01
    Keil 厂商DFP pack实现原理
    Golang 区块链开发指南
    K8s:部署 CNI 网络组件+k8s 多master集群部署+负载均衡及Dashboard k8s仪表盘图像化展示管理
    用最清爽的方式开发dotNet
    Zookeeper高级_选举机制
  • 原文地址:https://blog.csdn.net/wlijun_0808/article/details/126373592