JAVASCRIPT 基础教程
JAVASCRIPT & DOM
JAVASCRIPT & BOM
JAVASCRIPT 高级教程
JAVASCRIPT 示例
JAVASCRIPT 参考

JavaScript 对象

在本教程中,您将学习如何在 JavaScript 中创建和使用对象。

什么是对象?

JavaScript 是一种基于对象的语言,在 JavaScript 中,几乎所有的东西都是对象或行为类似于对象。 因此,为了有效和高效地使用 JavaScript,我们需要了解对象是如何工作的,以及如何创建自己的对象并使用它们。

JavaScript 对象只是命名值的集合。 这些命名值通常称为对象的属性。 如果您还记得 JavaScript 数组 一章,数组是值的集合,其中每个值都有一个从零开始并递增的索引(数字键) 每个值加一。 对象类似于数组,但不同之处在于您自己定义键,例如姓名、年龄、性别等。 在接下来的部分中,我们将详细了解对象。

创建对象

可以使用带有可选属性列表的大括号 {} 创建对象。 属性是"key: value"对,其中key(键或属性名称)始终是字符串,value(值或属性值)可以是任何数据类型 ,如字符串、数字、布尔值或复杂数据类型,如数组、函数和其他对象。 此外,以函数为值的属性通常称为方法,以将它们与其他属性区分开来。 一个典型的 JavaScript 对象可能如下所示:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male",
    displayName: function() {
        alert(this.name);
    }
};

上面的示例创建了一个名为 person 的对象,该对象具有三个属性 name, age, gender 和一个方法 displayName()displayName() 方法显示 this.name 的值,解析为 person.name。 这是在 JavaScript 中创建新对象的最简单和首选的方法,称为 对象字面量 语法。

属性名称通常不需要引用,除非它们是保留字,或者如果它们包含空格或特殊字符(除了字母、数字和 _$ 字符),或者如果它们以数字开头,如以下示例所示:

var person = {
    "first name": "Peter",
    "current age": 28,
    gender: "Male"
};

注意: 从 ECMAScript 5 开始,保留字可以用作对象的属性名称而无需引用。 但是,您应该避免这样做以获得更好的兼容性。


访问对象的属性

要访问或获取属性的值,您可以使用点 (.) 或方括号 ([]) 表示法,如下例所示:

var book = {
    "name": "Harry Potter and the Goblet of Fire",
    "author": "J. K. Rowling",
    "year": 2000
};

// 点符号
document.write(book.author);  // Prints: J. K. Rowling

// 括号符号
document.write(book["year"]); // Prints: 2000

点表示法更易于阅读和书写,但不能总是使用。 如果属性名称无效(即如果它包含空格或特殊字符),则不能使用点表示法; 您必须使用括号表示法,如以下示例所示:

var book = {
    name: "Harry Potter and the Goblet of Fire",
    author: "J. K. Rowling",
    "publication date": "8 July 2000"
};

// 括号符号
document.write(book["publication date"]); // Prints: 8 July 2000

方括号表示法比点表示法提供了更多的灵活性。 它还允许您将属性名称指定为变量,而不仅仅是字符串文字,如下例所示:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male"
};

var key = prompt("Enter any property name to get its value");
alert(person[key]); // 输出: Peter (if enter "name")

循环遍历对象的属性

您可以使用 for...in 循环遍历对象的键值对。 此循环专门针对迭代对象的属性进行了优化。 这是一个例子:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male"
};

// 迭代对象属性
for(var i in person) {  
    document.write(person[i] + "<br>"); // Prints: name, age and gender
}

设置对象的属性

同样,您可以使用点 (.) 或括号 ([]) 表示法设置新属性或更新现有属性,如下例所示:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male"
};

// 设置新属性
person.country = "United States";
document.write(person.country); // Prints: United States

person["email"] = "peterparker@mail.com";
document.write(person.email); // Prints: peterparker@mail.com

// 更新现有属性
person.age = 30;
document.write(person.age); // Prints: 30

person["name"] = "Peter Parker";
document.write(person.name); // Prints: Peter Parker

删除对象的属性

delete 运算符可用于从对象中完全删除属性。 删除是从对象中实际删除属性的唯一方法。 将属性设置为 undefinednull 只会更改属性的值。 它不会从对象中删除属性。

var person = {
    name: "Peter",
    age: 28,
    gender: "Male",
    displayName: function() {
        alert(this.name);
    }
};

// 删除属性
delete person.age;
alert(person.age); // 输出: undefined

注意: delete 运算符仅删除对象属性或数组元素。 它对变量或声明的函数没有影响。 但是,您应该避免使用 delete 操作符来删除数组元素,因为它不会改变数组的长度,只会在数组中留下一个洞。


调用对象的方法

您可以像访问属性一样访问对象的方法——使用点表示法或方括号表示法。 这是一个例子:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male",
    displayName: function() {
        alert(this.name);
    }
};

person.displayName(); // 输出: Peter
person["displayName"](); // 输出: Peter

按值与参考进行操作

JavaScript 对象是引用类型,这意味着当您复制它们时,您实际上只是复制了对该对象的引用。 而像字符串和数字这样的原始值是作为一个整体值分配或复制的。 为了更好地理解这一切,让我们看看下面的例子:

var message = "Hello World!";

var greet = message; // 将消息变量分配给新变量
greet = "Hi, there!";

document.write(message);  // Prints: Hello World!
document.write(greet);  // Prints: Hi, there!

在上面的示例中,我们复制了变量 message 并更改了该副本的值(即变量 greet)。 这两个变量保持不同和分开。 但是,如果我们对一个对象做同样的事情,我们会得到不同的结果,如下例所示:

var person = {
    name: "Peter",
    age: 28,
    gender: "Male"
};

var user = person; // 将人员变量分配给新变量
user.name = "Harry";

document.write(person.name);  // Prints: Harry
document.write(user.name);  // Prints: Harry

您可以清楚地看到,对变量 user 所做的任何更改也会更改 person 变量; 发生这种情况是因为两个变量都引用了同一个对象。 因此,简单地复制对象并不会真正克隆它,而是复制对该对象的引用。

Advertisements