⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

JavaScript 对象深入

学习对象的创建、方法、属性遍历、this · 难度:进阶 · +15XP

JavaScript 对象深入详解

对象(Object)是 JavaScript 最核心的数据类型。除了原始类型(string, number, boolean, null, undefined, symbol, bigint)外,一切皆为对象。对象是键值对(key-value pair)的集合,键是字符串或 Symbol,值可以是任意数据类型。理解对象的创建、属性描述符、原型链、遍历方式等核心概念是掌握 JavaScript 的关键。

创建对象的方式

  1. 对象字面量{},最常用
  2. 构造函数new Object() 或自定义构造函数
  3. Object.create():指定原型创建对象
  4. class 语法:ES6 类语法糖
// 1. 对象字面量
const user = {
  name: "张三",
  age: 25,
  greet() { return "你好,我是" + this.name; }
};

// 2. 构造函数 function User(name, age) { this.name = name; this.age = age; } User.prototype.greet = function() { return "你好,我是" + this.name; }; const u1 = new User("李四", 30);

// 3. Object.create() const proto = { type: "animal" }; const dog = Object.create(proto); dog.name = "旺财";

// 4. class 语法 class Person { constructor(name, age) { this.name = name; this.age = age; } greet() { return "你好,我是" + this.name; } } const p1 = new Person("王五", 28);

属性访问与操作

操作语法说明
点号访问obj.key简洁,但 key 必须是合法标识符
方括号访问obj["key"]支持动态 key 和特殊字符
属性存在检查"key" in obj包括原型链上的属性
自有属性检查obj.hasOwnProperty("key")不包括原型链
删除属性delete obj.key删除属性,可能影响性能
计算属性名{ [expr]: val }动态属性名
const key = "favoriteColor";
const obj = {
  name: "张三",
  age: 25,
  [key]: "蓝色",              // 计算属性名
  "complex-key": "特殊键名"   // 包含特殊字符的键名
};

// 访问方式对比 console.log(obj.name); // "张三" console.log(obj["age"]); // 25 console.log(obj[key]); // "蓝色"(动态 key) console.log(obj["complex-key"]); // "特殊键名"

// 属性检查 console.log("name" in obj); // true console.log(obj.hasOwnProperty("toString")); // false(在原型上)

// Object.defineProperty 定义精确控制的属性 Object.defineProperty(obj, "id", { value: 12345, writable: false, // 不可修改 enumerable: false, // 不可枚举 configurable: false // 不可删除/重新定义 });

对象遍历方法对比

const obj = { a: 1, b: 2, c: 3 };

// for...in:遍历自身及原型链上的可枚举属性 for (const key in obj) { console.log(key, obj[key]); }

// Object.keys():返回自身可枚举属性的键数组 Object.keys(obj).forEach(key => console.log(key, obj[key]));

// Object.values():返回自身可枚举属性的值数组 console.log(Object.values(obj)); // [1, 2, 3]

// Object.entries():返回 [key, value] 数组 for (const [key, value] of Object.entries(obj)) { console.log(key + " = " + value); }

// Object.getOwnPropertyNames():包括不可枚举属性(不含 Symbol) // Object.getOwnPropertySymbols():获取 Symbol 属性 // Reflect.ownKeys():获取所有自身属性(包括 Symbol 和不可枚举)

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0