实用的 JavaScript 对象内置方法
XPoet 自由程序猿

在 JavaScript 中,对象是一种特殊的数据结构,可以用来存储不同类型的元素。

作为我们开发人员使用最频繁的数据结构之一,本文介绍一些你可能不太了解但又非常实用的对象内置方法,帮助你提升开发效率,快速完成数据处理。

Object.keys(obj)

  • 描述:返回一个包含给定对象所有可枚举属性名称的数组。

  • 用法:

    1
    2
    3
    const myObject = { a: 1, b: 2, c: 3 };
    const keysArray = Object.keys(myObject);
    console.log(keysArray); // 输出: ['a', 'b', 'c']

Object.values(obj)

  • 描述:返回一个包含给定对象所有可枚举属性值的数组。

  • 用法:

    1
    2
    3
    const myObject = { a: 1, b: 2, c: 3 };
    const valuesArray = Object.values(myObject);
    console.log(valuesArray); // 输出: [1, 2, 3]

Object.entries(obj)

  • 描述:返回一个包含给定对象所有可枚举属性的键值对数组。

  • 用法:

    1
    2
    3
    const myObject = { a: 1, b: 2, c: 3 };
    const entriesArray = Object.entries(myObject);
    console.log(entriesArray); // 输出: [['a', 1], ['b', 2], ['c', 3]]

Object.assign(target, source1, source2, …)

  • 描述:将一个或多个源对象的属性复制到目标对象中。

  • 用法:

    1
    2
    3
    4
    5
    6
    const targetObject = { a: 1, b: 2 };
    const sourceObject = { b: 3, c: 4 };
    const mergedObject = Object.assign(targetObject, sourceObject);
    console.log(mergedObject); // 输出: { a: 1, b: 3, c: 4 }

    // 等同于 { ...targetObject, ...sourceObject }

Object.freeze(obj)

  • 描述:冻结一个对象,使其属性不可修改。

  • 用法:

    1
    2
    3
    4
    const myObject = { a: 1, b: 2 };
    Object.freeze(myObject);
    myObject.a = 100; // 不会报错,但不会修改成功
    console.log(myObject); // 输出: { a: 1, b: 2 }

Object.seal(obj)

  • 描述:密封一个对象,阻止添加新属性并将所有现有属性标记为不可配置。

  • 用法:

    1
    2
    3
    4
    5
    const myObject = { a: 1, b: 2 };
    Object.seal(myObject);
    myObject.c = 3; // 不会报错,但不会添加新属性
    delete myObject.a; // 不会报错,但不会删除属性
    console.log(myObject); // 输出: { a: 1, b: 2 }

Object.hasOwnProperty(prop)

  • 描述:返回一个布尔值,指示对象是否具有指定属性。

  • 用法:

    1
    2
    3
    const myObject = { a: 1, b: 2, c: 3 };
    console.log(myObject.hasOwnProperty('b')); // 输出:true
    console.log(myObject.hasOwnProperty('d')); // 输出:false

Object.hasOwn(obj, prop)

  • 描述:返回一个布尔值,判断对象是否具有指定属性。(跟 Object.hasOwnProperty() 作用一致)

  • 用法:

    1
    2
    3
    const myObject = { a: 1, b: 2, c: 3 };
    console.log(Object.hasOwn(myObject, 'a')); // 输出:true
    console.log(Object.hasOwn(myObject, 'd')); // 输出:false

Object.getOwnPropertyDescriptor(obj, prop)

  • 描述:返回一个对象,该对象描述了给定对象上指定属性的配置。

  • 用法:

    1
    2
    3
    4
    const myObject = { a: 1, b: 2 };
    const propertyDescriptor = Object.getOwnPropertyDescriptor(myObject, 'a');
    console.log(propertyDescriptor);
    // 输出: { value: 1, writable: true, enumerable: true, configurable: true }

Object.defineProperties(obj, props)

  • 描述:定义或修改对象的多个属性。

  • 用法:

    1
    2
    3
    4
    5
    6
    const myObject = {};
    Object.defineProperties(myObject, {
    a: { value: 1, writable: true },
    b: { value: 2, writable: false },
    });
    console.log(myObject); // 输出: { a: 1, b: 2 }

Object.getPrototypeOf(obj)

  • 描述:返回指定对象的原型。

  • 用法:

    1
    2
    3
    const myObject = {};
    const prototype = Object.getPrototypeOf(myObject);
    console.log(prototype); // 输出:{}

Object.setPrototypeOf(obj, prototype)

  • 描述:设置对象的原型(即修改对象的 [[Prototype]] 内部属性)。

  • 用法:

    1
    2
    3
    4
    const myObject = {};
    const newPrototype = { a: 1 };
    Object.setPrototypeOf(myObject, newPrototype);
    console.log(myObject.a); // 输出:1

Object.getOwnPropertySymbols(obj)

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

  • 用法:

    1
    2
    3
    4
    const mySymbol = Symbol('mySymbol');
    const myObject = { a: 1, [mySymbol]: 'symbol' };
    const symbolProperties = Object.getOwnPropertySymbols(myObject);
    console.log(symbolProperties); // 输出:[Symbol(mySymbol)]

Object.is(obj1, obj2)

  • 描述:比较两个值是否相同,类似于 === 运算符

  • 用法:

    1
    2
    console.log(Object.is(1, 1)); // 输出:true
    console.log(Object.is({}, {})); // 输出:false,不同的引用
 Comments
Comment plugin failed to load
Loading comment plugin