JavaScript 中 Object

一、Object 基本概念

JavaScript 的 Object 是存储键值对(属性和方法)的集合,所有对象(如 Array、Function 等)均继承自 Object.prototype
属性名可以是字符串或 Symbol,值可以是任何数据类型(包括其他对象或函数)

二、创建对象的方式

  1. 字面量创建‌(最常用):

let obj = { name: "John", age: 30 };

      构造函数创建‌:

let obj = new Object();obj.name = "John";

Object.create()‌(基于原型创建):

let parent = { type: "Parent" };let child = Object.create(parent); console.log(child.type); // "Parent" :ml-citation{ref="3,7" data="citationList"}

三、常用静态方法

方法作用示例
Object.assign()合并对象(浅拷贝)let newObj = Object.assign({}, obj1, obj2); 
Object.keys()返回对象自身可枚举属性名数组Object.keys({a:1, b:2}); // ["a", "b"] 
Object.values()返回对象自身可枚举属性值数组Object.values({a:1, b:2}); // [1, 2] 
Object.entries()返回键值对数组Object.entries({a:1}); // [["a",1]] 
Object.freeze()冻结对象(禁止增删改属性)Object.freeze(obj);

四、实例方法与特性

  1. 属性操作‌:

obj.prop = "value";        // 添加属性obj["prop"] = "value";     // 动态属性名delete obj.prop;           // 删除属性 :ml-citation{ref="7" data="citationList"}


‌     检测属性‌:

obj.hasOwnProperty("prop");    // 是否自身属性(非继承) :ml-citation{ref="8" data="citationList"}"prop" in obj;                 // 是否存在于原型链 :ml-citation{ref="8" data="citationList"}
  1. 原型链问题‌:

    • 所有对象默认继承 Object.prototype,可能导致原型污染(如通过 __proto__

    • 安全实践:避免直接操作 __proto__,使用 Object.create(null) 创建无原型对象。

五、遍历对象

  1. for...in 循环‌:遍历对象及其原型链的可枚举属性,需配合 hasOwnProperty 过滤:

for (const key in obj) {  if (obj.hasOwnProperty(key)) {    console.log(key, obj[key]);   }} :ml-citation{ref="1,7" data="citationList"}


      Object.keys() + forEach‌:仅遍历自身属性:

Object.keys(obj).forEach(key => {  console.log(key, obj[key]);}); :ml-citation{ref="7" data="citationList"}


六、注意事项

  1. 引用类型特性‌:
    Object 作为引用类型,赋值传递的是地址,修改会同步到所有引用该对象的变量

  2. 与 Map 的对比‌:

    • Object 的键只能是字符串或 Symbol,Map 支持任意类型键(如对象、函数)

    • Map 直接提供 size 属性和迭代方法,更适合频繁增删键值对的场景

// 创建对象const user = {  name: "Alice",  greet() {    console.log(`Hello, ${this.name}!`);  }};// 合并对象const details = { age: 25 };const merged = Object.assign({}, user, details); // {name: "Alice", age:25} :ml-citation{ref="1" data="citationList"}// 遍历属性Object.entries(merged).forEach(([key, val]) => {  console.log(`${key}: ${val}`); // "name: Alice", "age: 25"});



标签:

相关文章

关于夏天

在一个炎热的午后,阳光穿过树叶的缝隙,洒在公园的草地上。空气中弥漫着夏日的气息,那是炎热中夹杂着淡淡的花香,还有草地的清新味道。在这个充满活力的季节,夏天以其独特的方式展示着它的魅力。夏天是一个充满色...

如何利用ai 挣钱

以下是2025年普通人利用AI技术实现创收的主流方式,涵盖多个领域且实操性强:一、内容创作类‌AI图文生成‌通过ChatGPT、火山写作等工具批量生成自媒体文章/短视频脚本,调整20%内容规避平台检测...

前端-网络问题

1. 什么是HTTP?它是如何工作的?答案:HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议。它使用客户端-服务器模型,客户端发送HTTP请求到服务...

JavaScript(ECMAScript)新特性

一、异步处理优化‌Promise.withResolvers‌支持直接创建包含resolve和reject控制的Promise对象,简化异步流程管理,适用于延迟加载、事件流控制等场景const&nbs...

Dart 语言

一、Dart 语言基础与开发环境1. Dart 语言概述Dart 是由 Google 开发的客户端优化编程语言,具备以下核心特性:‌跨平台支持‌:可编译为原生代码或 JavaScript,适用于移动、...

PHP的现状

一、技术演进与性能提升‌版本迭代‌PHP 8.4版本提前于2024年11月19日发布,引入了更成熟的JIT编译器和Fibers异步编程特性,代码执行速度接近原生水平性能优化持续发力,PHP 8.x系列...