JavaScript 对象

JavaScript 的设计是一个基于对象的范式,JavaScript 中一切都是对象。

  • 字符串可以是对象
  • 布尔值可以是对象
  • 数字可以是对象
  • 日期总是对象
  • 数学永远是对象
  • 正则表达式始终是对象
  • 数组始终是对象
  • 函数始终是对象
  • 对象永远是对象

JavaScript 基本类型

JavaScript 定义了 7 种基本数据类型(原始数据类型):

  • string
  • number
  • boolean
  • null
  • undefined
  • bigint
  • symbol (ECMAScript 2016 新增)

所有基本类型的值都是不可改变的。注意,这里说的基本类型的值,并不是赋值为基本类型的变量。变量是指向内存区的个引用,而值则是存储再内存中的具体值。

例如 x = 3.14,您可以通过重新赋值更改 x 的值。但是您不能更改 3.14 的值。

JavaScript 对象

JavaScript 对象是一个包含相关属性和方法的集合,属性描述了对象的信息,方法则定义了对象的操作。

let person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };

使用 const 关键字声明对象是一个好的编码习惯。

const person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };

对象属性

JavaScript 对象中的属性描述了对象的信息,属性一般是键值对数据。

属性名 属性值
firstName John
lastName Doe
age 50
eyeColor blue

只包含属性的对象结构在很多语言都有:

  • PHP 中的关联数组
  • Python 中的字典
  • C 中的哈希表
  • Java 中的哈希映射
  • Ruby 和 Perl 中的哈希

下一章会了解有关对象属性的更多信息。

对象方法

对象上的方法定义了对象可以执行的操作。

对象方法可以认为是一个特殊的属性,只是属性的值是函数

属性名 属性值
firstName John
lastName Doe
age 50
eyeColor blue
fullName function() {return this.firstName + " " + this.lastName;}

下一章会了解有关对象方法的更多信息。

创建 JavaScript 对象

使用 JavaScript,您可以定义和创建自己的对象。

创建新对象有一下几种方法:

  • 使用对象字面量创建单个对象。
  • 使用关键字创建单个对象 new
  • 定义一个对象构造函数,然后创建构造类型的对象。
  • 使用 Object.create() .

使用对象字面量

使用对象字面量,可以在一个语句中定义和创建一个对象,对象字面量是创建 JavaScript 对象的最简单方法。

对象字面量是花括号 {} 内的键值对的列表。

以下示例创建一个具有四个属性的 JavaScript 对象:

const person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };

空格和换行符并不重要。一个对象定义可以跨越多行:

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue",
};

此示例创建一个空的 JavaScript 对象,然后添加 4 个属性:

const person = {};
person.firstName = "John";
person.lastName = "Doe";
person.age = 50;
person.eyeColor = "blue";

使用 new Object()

下面的示例使用 new Object() 来创建一个新的 JavaScript 对象,然后添加 4 个属性:

const person = new Object();
person.firstName = "John";
person.lastName = "Doe";
person.age = 50;
person.eyeColor = "blue";

这与上面的例子完全一样。

一般没有必要使用 new Object(),为了可读性、简单性和执行速度,建议使用对象字面量方法。

JavaScript 对象是可变的

对象是可变的:它们是通过引用而不是值来寻址的。

如果 person 是一个对象,以下语句不会创建 person 的副本:

const x = person; // 不会创建 person 的副本

对象 x 不是 person 的副本。xperson 都是同一个对象。对 x 的任何更改也会更改 person,因为 xperson 是同一个对象。

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue",
};

const x = person;
x.age = 10; // 会同时更改 x.age 和 person.age