JavaScript-Object

文章目录

  • 前言
      • [1. **`Object.create(proto[, propertiesObject])`**](#1. Object.create(proto[, propertiesObject]))
      • [2. **`Object.assign(target, ...sources)`**](#2. Object.assign(target, ...sources))
      • [3. **`Object.keys(obj)`**](#3. Object.keys(obj))
      • [4. **`Object.values(obj)`**](#4. Object.values(obj))
      • [5. **`Object.entries(obj)`**](#5. Object.entries(obj))
      • [6. **`Object.freeze(obj)`**](#6. Object.freeze(obj))
      • [7. **`Object.seal(obj)`**](#7. Object.seal(obj))
      • [8. **`Object.getPrototypeOf(obj)`**](#8. Object.getPrototypeOf(obj))
      • [9. **`Object.setPrototypeOf(obj, prototype)`**](#9. Object.setPrototypeOf(obj, prototype))
      • [10. **`Object.defineProperty(obj, prop, descriptor)`**](#10. Object.defineProperty(obj, prop, descriptor))
      • [11. **`Object.defineProperties(obj, props)`**](#11. Object.defineProperties(obj, props))
      • [12. **`Object.getOwnPropertyDescriptor(obj, prop)`**](#12. Object.getOwnPropertyDescriptor(obj, prop))
      • [13. **`Object.getOwnPropertyDescriptors(obj)`**](#13. Object.getOwnPropertyDescriptors(obj))
      • [14. **`Object.getOwnPropertyNames(obj)`**](#14. Object.getOwnPropertyNames(obj))
      • [15. **`Object.getOwnPropertySymbols(obj)`**](#15. Object.getOwnPropertySymbols(obj))
      • [16. **`Object.is(value1, value2)`**](#16. Object.is(value1, value2))
      • [17. **`Object.isExtensible(obj)`**](#17. Object.isExtensible(obj))
      • [18. **`Object.isFrozen(obj)`**](#18. Object.isFrozen(obj))
      • [19. **`Object.isSealed(obj)`**](#19. Object.isSealed(obj))
      • [20. **`Object.preventExtensions(obj)`**](#20. Object.preventExtensions(obj))

前言

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

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

  • 创建一个新的对象,并将其原型设置为指定的对象。

  • 示例 :

    javascript 复制代码
    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)

  • 将所有可枚举的属性从一个或多个源对象复制到目标对象。它返回目标对象。

  • 示例 :

    javascript 复制代码
    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)

  • 返回一个数组,包含给定对象自身的所有可枚举属性名。

  • 示例 :

    javascript 复制代码
    const obj = { a: 1, b: 2, c: 3 };
    const keys = Object.keys(obj);
    console.log(keys); // 输出: ["a", "b", "c"]

4. Object.values(obj)

  • 返回一个数组,包含给定对象自身的所有可枚举属性值。

  • 示例 :

    javascript 复制代码
    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] 对。

  • 示例 :

    javascript 复制代码
    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)

  • 冻结一个对象:冻结后不能向其添加或删除属性,且所有现有属性不可修改或重新配置。

  • 示例 :

    javascript 复制代码
    const obj = { a: 1 };
    Object.freeze(obj);
    
    obj.a = 2; // 没有效果
    obj.b = 3; // 没有效果
    console.log(obj); // 输出: { a: 1 }

7. Object.seal(obj)

  • 封闭一个对象:不能添加或删除属性,但可以修改现有属性。

  • 示例 :

    javascript 复制代码
    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]] 属性的值)。

  • 示例 :

    javascript 复制代码
    const obj = Object.create({ x: 10 });
    console.log(Object.getPrototypeOf(obj)); // 输出: { x: 10 }

9. Object.setPrototypeOf(obj, prototype)

  • 设置指定对象的原型(内部 [[Prototype]] 属性的值)。

  • 示例 :

    javascript 复制代码
    const obj = { a: 1 };
    const proto = { b: 2 };
    
    Object.setPrototypeOf(obj, proto);
    console.log(obj.b); // 输出: 2

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

  • 定义对象的新属性或修改现有属性,返回对象。

  • 示例 :

    javascript 复制代码
    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)

  • 同时定义多个属性或修改多个属性。

  • 示例 :

    javascript 复制代码
    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)

  • 返回指定属性的属性描述符(对象),如果该属性存在于对象中。

  • 示例 :

    javascript 复制代码
    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)

  • 返回指定对象所有自身属性的属性描述符。

  • 示例 :

    javascript 复制代码
    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)

  • 返回一个数组,包含对象自身的所有属性(包括不可枚举属性,但不包括符号属性)。

  • 示例 :

    javascript 复制代码
    const obj = { a: 1, b: 2 };
    const names = Object.getOwnPropertyNames(obj);
    console.log(names); // 输出: ["a", "b"]

15. Object.getOwnPropertySymbols(obj)

  • 返回一个数组,包含对象自身的所有符号属性。

  • 示例 :

    javascript 复制代码
    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)

  • 比较两个值是否相同。类似于 ===,但更严格。

  • 示例 :

    javascript 复制代码
    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)

  • 检查对象是否可扩展(即是否可以向对象添加新属性)。

  • 示例 :

    javascript 复制代码
    const obj = {};
    console.log(Object.isExtensible(obj)); // 输出: true
    
    Object.preventExtensions(obj);
    console.log(Object.isExtensible(obj)); // 输出: false

18. Object.isFrozen(obj)

  • 检查对象是否被冻结。

  • 示例 :

    javascript 复制代码
    const obj = Object.freeze({ a: 1 });
    console.log(Object.isFrozen(obj)); // 输出: true

19. Object.isSealed(obj)

  • 检查对象是否被密封。

  • 示例 :

    javascript 复制代码
    const obj = Object.seal({ a: 1 });
    console.log(Object.isSealed(obj)); // 输出: true

20. Object.preventExtensions(obj)

  • 防止对象扩展,不能向对象添加新属性。

  • 示例 :

    javascript 复制代码
    const obj = { a: 1 };
    Object.preventExtensions(obj);
    
    obj.b = 2; // 无效,无法添加新属性
    console.log(obj); // 输出: { a: 1 }

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

相关推荐
一点媛艺32 分钟前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风36 分钟前
《Kotlin实战》-附录
android·开发语言·kotlin
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
奋斗的小花生2 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功2 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨2 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程2 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Chrikk3 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*3 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go