JavaScript深入之引用类型

基本类型

JavaScript 变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型值指的是 简单的数据段,包括以下 6 种基本数据类型:Undefined、Null、Boolean、Number 、 String 和 Symbol。
基本类型保存在栈中,存储的是具体的值,是轻量级的数据存储方式。

引用类型

引用类型的值是保存在内存中的对象。与其他语言不同,JavaScript 不允许直接访问内存中的位置, 也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。 为此,引用类型的值是按引用访问的。

Object 类型

Object 是一个基础类型,其他所有类型都从 Object 继承了基本的行为。
创建 Object 实例的方式有两种。第一种是使用 new 操作符后跟 Object 构造函数,另一种方式是使用对象字面量表示法。

1
2
3
4
5
6
7
8
9
10
// new操作符创建对象
let person1 = new Object();
person.name = 'Zubin';
person.age = 18;

// 字面量表示法
let person2 = {
name: 'Zubin',
age: 18,
};

Array 对象

除了 Object 之外,Array 类型恐怕是 ECMAScript 中最常用的类型了。而且,ECMAScript 中 的数组与其他多数语言中的数组有着相当大的区别。

  • ECMAScript 数组的每一项可以保存任何类型的数据。
  • ECMAScript 数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容 纳新增数据。

方法:

  1. Array.from()
    从类数组对象或者可迭代对象中创建一个新的数组实例。

  2. Array.isArray()
    用来判断某个变量是否是一个数组对象。

  3. Array.of()
    根据一组参数来创建新的数组实例,支持任意的参数数量和类型。

数组实例的常用方法:

方法名称 说明
concat 用于连接两个或更多的数组并返回结果,arr1.concat(arr2)
join 把数组的所有元素放入一个字符串,元素通过制定的分隔符进行分离 arr1.join(‘,’)
pop 删除并返回数组中的最后一个元素 arr1.pop()
push 向数组的末尾添加一个或更多元素,并返回新的长度 arr1.push(1)
reverse 颠倒数组中的元素顺序,arr1.reverse()
shift 删除并返回数组中的第一个元素 arr1.shift()
slice 从某个已有的数组返回指定的元素
sort 对数组的元素进行排序 arr1.sort()
splice 删除元素,并向数组中添加新元素
toString 把数组转成字符串 arr1.toString()
toLocaleString 把数组转换为本地字符串 arr1.toLocaleString()
valueOf 返回数组对象的原始值

Date 对象

创建 Date 实例用来处理日期和时间。Date 对象基于 1970 年 1 月 1 日(世界标准时间)起的毫秒数。

1
2
3
4
5
6
7
8
var today = new Date();
var today = new Date(1453094034000); // by timestamp(accurate to the milliseconds)
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);

var unixTimestamp = Date.now(); // in milliseconds

方法

  1. Date.now()
    返回自 1970-1-1 00:00:00 UTC (世界标准时间)至今所经过的毫秒数。
  2. Date.parse()
    解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。
  3. Date.UTC()
    接受和构造函数最长形式的参数相同的参数(从 2 到 7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。

RegExp 类型

类型是 ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表 达式功能。

1
2
3
4
5
6
7
8
9
10
11
var regex1 = /\w+/;
var regex2 = new RegExp('\\w+');

console.log(regex1);
// expected output: /\w+/

console.log(regex2);
// expected output: /\w+/

console.log(regex1 === regex2);
// expected output: false

Function 类型

Function 构造函数 创建一个新的 Function 对象。 在 JavaScript 中, 每个函数实际上都是一个 Function 对象。

1
2
3
4
var sum = new Function('a', 'b', 'return a + b');

console.log(sum(2, 6));
// expected output: 8

参考文档

MDN JavaScript
JavaScript 高级程序设计(第 3 版)