对象的基本操作

在 JavaScript 中,对象(Object)是一种复合数据类型,用于存储键值对(key-value pairs)。对象是 JavaScript 中最核心的概念之一,几乎所有的东西都可以看作是对象或与对象相关。

Object 的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。

创建对象的方式

1. 对象字面量

这是最常见和最简单的创建对象的方式。

let person = {
    name: "Alice",
    age: 25,
    greet: function() {
        console.log("Hello, my name is " + this.name);
    }
};

2. 使用 new Object()

你也可以使用 new Object() 来创建一个对象。

let person = new Object();
person.name = "Alice";
person.age = 25;
person.greet = function() {
    console.log("Hello, my name is " + this.name);
};

3. 使用构造函数

你可以定义一个构造函数,然后使用 new 关键字来创建对象。

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.greet = function() {
        console.log("Hello, my name is " + this.name);
    };
}

let person = new Person("Alice", 25);

4. 使用 Object.create()

Object.create() 方法创建一个新对象,使用现有的对象作为新对象的原型。

let personPrototype = {
    greet: function() {
        console.log("Hello, my name is " + this.name);
    }
};

let person = Object.create(personPrototype);
person.name = "Alice";
person.age = 25;

访问对象属性

object 可以通过 .[] 来访问。

console.log(person.name); // 输出: Alice
console.log(person['age']); // 输出: 25

修改对象属性

你可以通过赋值来修改对象的属性。

person.name = "Bob";
person['age'] = 30;

删除对象属性

你可以使用 delete 操作符来删除对象的属性。

delete person.age;
console.log(person.age); // 输出: undefined

对象方法

对象的方法就是对象的属性,只不过这个属性的值是一个函数。

person.greet(); // 输出: Hello, my name is Bob

this 关键字

在对象方法中,this 关键字引用的是调用该方法的对象。

let person = {
    name: "Alice",
    greet: function() {
        console.log("Hello, my name is " + this.name);
    }
};

person.greet(); // 输出: Hello, my name is Alice

遍历对象属性

你可以使用 for...in 循环来遍历对象的所有可枚举属性。

for (let key in person) {
    console.log(key + ": " + person[key]);
}

对象的原型

每个 JavaScript 对象都有一个原型(prototype),原型是一个对象,其他对象可以从它继承属性和方法。

let animal = {
    speak: function() {
        console.log(this.sound);
    }
};

let dog = Object.create(animal);
dog.sound = "Woof";
dog.speak(); // 输出: Woof

对象的静态方法

Object 构造函数本身也有一些有用的静态方法,例如 Object.keys()Object.values()Object.entries()

let keys = Object.keys(person); // 返回对象的所有键
let values = Object.values(person); // 返回对象的所有值
let entries = Object.entries(person); // 返回对象的键值对数组

对象的扩展与合并

你可以使用 Object.assign() 或扩展运算符(...)来合并对象。

let obj1 = { a: 1, b: 2 };
let obj2 = { b: 3, c: 4 };

let merged = Object.assign({}, obj1, obj2);
// 或者使用扩展运算符
let merged = { ...obj1, ...obj2 };

console.log(merged); // 输出: { a: 1, b: 3, c: 4 }

对象的冻结与密封

你可以使用 Object.freeze()Object.seal() 来防止对象被修改。

  • Object.freeze():冻结对象,不能添加、删除或修改属性。

  • Object.seal():密封对象,不能添加或删除属性,但可以修改现有属性。

let obj = { a: 1, b: 2 };

Object.freeze(obj);
obj.c = 3; // 无效,对象已被冻结

Object.seal(obj);
obj.a = 10; // 有效
delete obj.a; // 无效,对象已被密封

总结

JavaScript 中的对象是非常灵活和强大的数据结构,几乎所有的复杂数据都可以通过对象来表示。理解对象的创建、访问、修改、遍历以及原型链等概念,对于掌握 JavaScript 编程至关重要。

Last updated