对象

概述

在JavaScript中,对象(Object)是一种复合值,它允许你将多个值(原始值或其他对象)组织成一个结构化的实体。对象是通过键值对(key-value pairs)来存储数据的,其中键(key)是一个字符串(或Symbol),而值(value)可以是任何数据类型,包括原始值(如数字、字符串)、其他对象或函数。

对象基本操作

创建对象

在JavaScript中,有几种创建对象的方法:

  1. 对象字面量

    1
    2
    3
    4
    5
    6
    7
    let person = {
    name: "Alice",
    age: 30,
    greet: function() {
    console.log("Hello, my name is " + this.name);
    }
    };
  2. 构造函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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", 30);
  3. Object.create() 方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    let proto = {
    greet: function() {
    console.log("Hello!");
    }
    };

    let person = Object.create(proto);
    person.name = "Alice";
    person.age = 30;
  4. 类(ES6及更高版本)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Person {
    constructor(name, age) {
    this.name = name;
    this.age = age;
    }

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

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

访问对象属性

你可以通过点(.)或方括号([])语法来访问对象的属性:

1
2
console.log(person.name); // 输出: Alice
console.log(person["age"]); // 输出: 30

添加或修改对象属性

你可以通过赋值操作来添加或修改对象的属性:

1
2
person.job = "Engineer"; // 添加新属性
person.age = 31; // 修改现有属性

删除对象属性

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

1
delete person.job; // 删除 job 属性

在JavaScript中,Object.keys()Object.values()Object.entries() 是三个用于遍历对象自身可枚举属性(即非继承的、非Symbol类型的属性)的静态方法。这些方法都返回一个数组,但数组的内容有所不同。

对象方法

Object.keys()

Object.keys() 方法返回一个数组,其包含对象自身的所有可枚举属性键(即属性的名字,作为字符串)。

1
2
3
4
5
6
7
const obj = {
a: 1,
b: 2,
c: 3
};

console.log(Object.keys(obj)); // 输出: ["a", "b", "c"]

Object.values()

Object.values() 方法返回一个数组,其包含对象自身的所有可枚举属性值(即属性的值)。

1
2
3
4
5
6
7
const obj = {
a: 1,
b: 'hello',
c: true
};

console.log(Object.values(obj)); // 输出: [1, "hello", true]

Object.entries()

Object.entries() 方法返回一个数组,其元素是对象自身的所有可枚举属性的键值对数组(即每个元素都是一个包含两个元素的数组,第一个元素是键,第二个元素是值)。

1
2
3
4
5
6
7
const obj = {
a: 1,
b: 'hello',
c: true
};

console.log(Object.entries(obj)); // 输出: [["a", 1], ["b", "hello"], ["c", true]]

遍历对象

在JavaScript中,遍历对象(即访问对象的所有可枚举属性)可以通过多种方法实现。以下是一些常用的遍历对象的方式:

for…in循环

for...in 循环用于遍历对象的可枚举属性(包括从原型链上继承的可枚举属性,但可以通过 hasOwnProperty 方法来过滤掉这些继承的属性)。

1
2
3
4
5
6
7
8
9
10
11
const obj = {
a: 1,
b: 2,
c: 3
};

for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}: ${obj[key]}`);
}
}

forEach方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const obj = {
a: 1,
b: 'hello',
c: true
};

// 使用 Object.keys() 遍历键
Object.keys(obj).forEach(key => {
console.log(`${key}: ${obj[key]}`);
});

// 使用 Object.values() 遍历值
Object.values(obj).forEach(value => {
console.log(value);
});

// 使用 Object.entries() 遍历键值对
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key}: ${value}`);
});