JavaScript-Object


前言

在 JavaScript 中,Object 是一个非常重要的全局对象,它提供了许多方法来处理对象。以下是 Object 的各种方法及其示例:

1. Object.create(proto[, propertiesObject])

  • 创建一个新的对象,并将其原型设置为指定的对象。
  • 示例:
    const person = {
      greet: function() {
        console.log(`Hello, my name is ${this.name}`);
      }
    };
    
    const john = Object.create(person);
    john.name = "John";
    john.greet(); // 输出: Hello, my name is John
    

===> MDN 入口

2. Object.assign(target, ...sources)

  • 将所有可枚举的属性从一个或多个源对象复制到目标对象。它返回目标对象。
  • 示例:
    const target = { a: 1, b: 2 };
    const source = { b: 4, c: 5 };
    
    const result = Object.assign(target, source);
    console.log(result); // 输出: { a: 1, b: 4, c: 5 }
    

3. Object.keys(obj)

  • 返回一个数组,包含给定对象自身的所有可枚举属性名。
  • 示例:
    const obj = { a: 1, b: 2, c: 3 };
    const keys = Object.keys(obj);
    console.log(keys); // 输出: ["a", "b", "c"]
    

4. Object.values(obj)

  • 返回一个数组,包含给定对象自身的所有可枚举属性值。
  • 示例:
    const obj = { a: 1, b: 2, c: 3 };
    const values = Object.values(obj);
    console.log(values); // 输出: [1, 2, 3]
    

5. Object.entries(obj)

  • 返回一个数组,其中包含给定对象自身的所有可枚举属性的 [key, value] 对。
  • 示例:
    const obj = { a: 1, b: 2, c: 3 };
    const entries = Object.entries(obj);
    console.log(entries); // 输出: [["a", 1], ["b", 2], ["c", 3]]
    

6. Object.freeze(obj)

  • 冻结一个对象:冻结后不能向其添加或删除属性,且所有现有属性不可修改或重新配置。
  • 示例:
    const obj = { a: 1 };
    Object.freeze(obj);
    
    obj.a = 2; // 没有效果
    obj.b = 3; // 没有效果
    console.log(obj); // 输出: { a: 1 }
    

7. Object.seal(obj)

  • 封闭一个对象:不能添加或删除属性,但可以修改现有属性。
  • 示例:
    const obj = { a: 1 };
    Object.seal(obj);
    
    obj.a = 2; // 可以修改现有属性
    delete obj.a; // 无效,不能删除属性
    obj.b = 3; // 无效,不能添加新属性
    console.log(obj); // 输出: { a: 2 }
    

8. Object.getPrototypeOf(obj)

  • 返回指定对象的原型(内部 [[Prototype]] 属性的值)。
  • 示例:
    const obj = Object.create({ x: 10 });
    console.log(Object.getPrototypeOf(obj)); // 输出: { x: 10 }
    

9. Object.setPrototypeOf(obj, prototype)

  • 设置指定对象的原型(内部 [[Prototype]] 属性的值)。
  • 示例:
    const obj = { a: 1 };
    const proto = { b: 2 };
    
    Object.setPrototypeOf(obj, proto);
    console.log(obj.b); // 输出: 2
    

10. Object.defineProperty(obj, prop, descriptor)

  • 定义对象的新属性或修改现有属性,返回对象。
  • 示例:
    const obj = {};
    Object.defineProperty(obj, 'a', {
      value: 1,
      writable: false, // 属性不可写
      enumerable: true, // 属性可枚举
      configurable: true // 属性可配置
    });
    
    console.log(obj.a); // 输出: 1
    obj.a = 2; // 修改无效
    console.log(obj.a); // 输出: 1
    

11. Object.defineProperties(obj, props)

  • 同时定义多个属性或修改多个属性。
  • 示例:
    const obj = {};
    Object.defineProperties(obj, {
      a: { value: 1, writable: true },
      b: { value: 2, writable: false }
    });
    
    console.log(obj.a); // 输出: 1
    console.log(obj.b); // 输出: 2
    

12. Object.getOwnPropertyDescriptor(obj, prop)

  • 返回指定属性的属性描述符(对象),如果该属性存在于对象中。
  • 示例:
    const obj = { a: 1 };
    const descriptor = Object.getOwnPropertyDescriptor(obj, 'a');
    console.log(descriptor); 
    // 输出: { value: 1, writable: true, enumerable: true, configurable: true }
    

13. Object.getOwnPropertyDescriptors(obj)

  • 返回指定对象所有自身属性的属性描述符。
  • 示例:
    const obj = { a: 1, b: 2 };
    const descriptors = Object.getOwnPropertyDescriptors(obj);
    console.log(descriptors);
    // 输出:
    // {
    //   a: { value: 1, writable: true, enumerable: true, configurable: true },
    //   b: { value: 2, writable: true, enumerable: true, configurable: true }
    // }
    

14. Object.getOwnPropertyNames(obj)

  • 返回一个数组,包含对象自身的所有属性(包括不可枚举属性,但不包括符号属性)。
  • 示例:
    const obj = { a: 1, b: 2 };
    const names = Object.getOwnPropertyNames(obj);
    console.log(names); // 输出: ["a", "b"]
    

15. Object.getOwnPropertySymbols(obj)

  • 返回一个数组,包含对象自身的所有符号属性。
  • 示例:
    const sym1 = Symbol('a');
    const sym2 = Symbol('b');
    const obj = { [sym1]: 1, [sym2]: 2 };
    
    const symbols = Object.getOwnPropertySymbols(obj);
    console.log(symbols); // 输出: [Symbol(a), Symbol(b)]
    

16. Object.is(value1, value2)

  • 比较两个值是否相同。类似于 ===,但更严格。
  • 示例:
    console.log(Object.is(25, 25)); // 输出: true
    console.log(Object.is(NaN, NaN)); // 输出: true
    console.log(Object.is(0, -0)); // 输出: false
    

17. Object.isExtensible(obj)

  • 检查对象是否可扩展(即是否可以向对象添加新属性)。
  • 示例:
    const obj = {};
    console.log(Object.isExtensible(obj)); // 输出: true
    
    Object.preventExtensions(obj);
    console.log(Object.isExtensible(obj)); // 输出: false
    

18. Object.isFrozen(obj)

  • 检查对象是否被冻结。
  • 示例:
    const obj = Object.freeze({ a: 1 });
    console.log(Object.isFrozen(obj)); // 输出: true
    

19. Object.isSealed(obj)

  • 检查对象是否被密封。
  • 示例:
    const obj = Object.seal({ a: 1 });
    console.log(Object.isSealed(obj)); // 输出: true
    

20. Object.preventExtensions(obj)

  • 防止对象扩展,不能向对象添加新属性。
  • 示例:
    const obj = { a: 1 };
    Object.preventExtensions(obj);
    
    obj.b = 2; // 无效,无法添加新属性
    console.log(obj); // 输出: { a: 1 }
    

这些方法是操作 JavaScript 对象时常用的工具,它们涵盖了对象的创建、属性管理、比较、以及对象的冻结、密封等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TE-茶叶蛋

踩坑不易,您的打赏,感谢万分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值