当前位置: 首页 > article >正文

一七四、JavaScript里Object的常用方法及其示例

在 JavaScript 中,Object 是一个基本的内建对象,提供了多种用于操作对象的静态方法。以下是 Object 对象的主要方法以及它们的使用示例:

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

将所有源对象(sources)的可枚举属性复制到目标对象(target)中。返回目标对象。

示例:
const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = Object.assign(target, source);
console.log(result);  // 输出: { a: 1, b: 2, c: 3 }

2. Object.create(proto, propertiesObject)

使用指定的原型对象(proto)和可选的属性描述符(propertiesObject)创建一个新的对象。

示例:
const proto = { greet: function() { console.log('Hello!'); } };
const obj = Object.create(proto);
obj.greet();  // 输出: Hello!

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

在对象上定义一个新的属性,或修改现有属性。descriptor 参数描述了该属性的配置。

示例:
const obj = {};
Object.defineProperty(obj, 'name', {
  value: 'John',
  writable: true,
  enumerable: true,
  configurable: true
});
console.log(obj.name);  // 输出: John

4. Object.defineProperties(obj, descriptors)

定义或修改对象的多个属性。

示例:
const obj = {};
Object.defineProperties(obj, {
  'name': {
    value: 'John',
    writable: true
  },
  'age': {
    value: 30,
    writable: true
  }
});
console.log(obj);  // 输出: { name: 'John', age: 30 }

5. Object.entries(obj)

返回一个给定对象自身可枚举属性的键值对数组。

示例:
const obj = { a: 1, b: 2 };
const entries = Object.entries(obj);
console.log(entries);  // 输出: [['a', 1], ['b', 2]]

6. Object.freeze(obj)

冻结对象,阻止新增属性,修改现有属性和删除现有属性。

示例:
const obj = { a: 1 };
Object.freeze(obj);
obj.a = 2;  // 不会改变对象
console.log(obj.a);  // 输出: 1

7. Object.fromEntries(iterable)

将一个键值对的可迭代对象(如数组)转换为一个对象。

示例:
const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj);  // 输出: { a: 1, b: 2 }

8. 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 }

9. 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 } }

10. Object.getOwnPropertyNames(obj)

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

示例:
const obj = { a: 1, b: 2 };
const props = Object.getOwnPropertyNames(obj);
console.log(props);  // 输出: ['a', 'b']

11. Object.getPrototypeOf(obj)

返回对象的原型([[Prototype]])。

示例:
const obj = { a: 1 };
const prototype = Object.getPrototypeOf(obj);
console.log(prototype);  // 输出: { constructor: f }

12. Object.is(value1, value2)

比较两个值是否严格相等,区别于 === 运算符,它能够区分 +0-0,以及 NaNNaN

示例:
console.log(Object.is(0, -0));    // 输出: false
console.log(Object.is(NaN, NaN)); // 输出: true

13. Object.isExtensible(obj)

判断一个对象是否可扩展,即是否可以添加新属性。

示例:
const obj = { a: 1 };
console.log(Object.isExtensible(obj));  // 输出: true
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj));  // 输出: false

14. Object.isFrozen(obj)

检查对象是否被冻结。

示例:
const obj = { a: 1 };
console.log(Object.isFrozen(obj));  // 输出: false
Object.freeze(obj);
console.log(Object.isFrozen(obj));  // 输出: true

15. Object.isSealed(obj)

检查对象是否被密封(即不可新增或删除属性)。

示例:
const obj = { a: 1 };
console.log(Object.isSealed(obj));  // 输出: false
Object.seal(obj);
console.log(Object.isSealed(obj));  // 输出: true

16. Object.keys(obj)

返回对象自身的所有可枚举属性的键。

示例:
const obj = { a: 1, b: 2 };
const keys = Object.keys(obj);
console.log(keys);  // 输出: ['a', 'b']

17. Object.seal(obj)

密封对象,禁止新增或删除属性,但可以修改现有属性。

示例:
const obj = { a: 1 };
Object.seal(obj);
obj.a = 2;  // 可以修改现有属性
delete obj.a;  // 不能删除属性
console.log(obj);  // 输出: { a: 2 }

18. Object.setPrototypeOf(obj, prototype)

设置对象的原型([[Prototype]])。

示例:
const obj = { a: 1 };
const prototype = { greet: function() { console.log('Hello!'); } };
Object.setPrototypeOf(obj, prototype);
obj.greet();  // 输出: Hello!

总结

Object 对象提供了许多用于操作对象的静态方法,涵盖了属性定义、对象冻结与密封、对象属性描述符、对象继承关系等多个方面,适用于在实际开发中处理对象时提高代码效率和可维护性。


http://www.kler.cn/a/383555.html

相关文章:

  • 单元测试日志打印相关接口及类 Logger
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:解锁大数据分析的速度密码(上)(1/30)
  • 数据结构与算法分析:专题内容——动态规划1之理论讲解(代码详解+万字长文+算法导论+力扣题)
  • string模拟实现插入+删除
  • 基于STM32的智能植物灌溉系统设计
  • Jest进阶知识:深入测试 React Hooks-确保自定义逻辑的可靠性
  • 揭秘全向轮运动学:机动艺术与上下位机通信的智慧桥梁
  • 大模型低秩分解
  • Vue 2 + JavaScript + vuedraggable 集成案例
  • 【Effective C++】阅读笔记3
  • 深入了解逻辑回归:机器学习中的经典算法
  • 【css】overflow: hidden效果
  • 【设计模式】结构型模式(三):桥接模式、外观模式
  • 如何建购物网站提升用户体验
  • 泷羽sec学习打卡-shodan扫描6
  • 完成程序《大奖赛评分B》
  • Python入门资料!笨办法学Python!编程小白的第一本Python入门书!
  • 解决微信小程序电脑能正常使用,手机端无法正常访问的问题
  • 100种算法【Python版】第56篇——Delaunay三角剖分之增量法
  • HTTP返回码和其含义
  • Flutter鸿蒙next 中使用 MobX 进行状态管理
  • Pinia-状态管理
  • Docker学习—Docker的安装与使用
  • 串联电抗器电感量误差较大的原因
  • chrome浏览器network控制台使用和功能介绍
  • C#/.NET/.NET Core优秀项目和框架2024年10月简报