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 对象时常用的工具,它们涵盖了对象的创建、属性管理、比较、以及对象的冻结、密封等功能。

相关推荐
若亦_Royi18 分钟前
C++ 的大括号的用法合集
开发语言·c++
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
m0_748255022 小时前
前端常用算法集合
前端·算法
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203982 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2343 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
众拾达人3 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言