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
的副本。x
和 person
都是同一个对象。对 x
的任何更改也会更改 person
,因为 x
和 person
是同一个对象。
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue",
};
const x = person;
x.age = 10; // 会同时更改 x.age 和 person.age