《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
引用类型
在 ECMAScript 中,引用类型指的是一种数据类型,这种数据类型是由多个不同的属性组成的对象。
Object 类型
Object 类型是 ECMAScript 中最基本的数据类型,也可以称之为引用类型的总称。对象是由键值对组成的无序集合。
创建一个 Object 类型的实例,可以使用 Object 构造函数,也可以使用对象字面量的方式。
var person = new Object();
person.name = '张三';
person.age = 18;
或者
var person = {
name: '张三',
age: 18
};
Array 类型
Array 类型也是 ECMAScript 中的一种引用类型,它是一组有序的数据的集合。数组是一种特殊的对象,它的键名是从 0 开始的数字下标。Array 实例具有一些非常有用的方法,如 push、pop、shift、unshift、splice 等等。
创建一个数组可以使用 Array 构造函数,也可以使用数组字面量的方式。
var arr1 = new Array(1, 2, 3); // 使用 Array 构造函数
var arr2 = [1, 2, 3]; // 使用数组字面量的方式
Date 类型
Date 类型是 ECMAScript 中的一种引用类型,它用于表示日期和时间,提供了有关日期和时间的操作方法。
创建一个 Date 类型可以使用 Date 构造函数,也可以使用 Date.parse() 函数。
var date1 = new Date(); // 获取当前时间
var date2 = new Date('2021-05-01T00:00:00'); // 使用日期格式字符串创建
var date3 = Date.parse('2021-05-01T00:00:00'); // 使用 Date.parse() 函数创建
RegExp 类型
RegExp 类型也是 ECMAScript 中的一种引用类型,它用于处理正则表达式。
创建一个正则表达式可以使用 RegExp 构造函数,也可以使用正则字面量的方式。
var reg1 = new RegExp('\\d+'); // 使用 RegExp 构造函数
var reg2 = /\d+/; // 使用正则字面量的方式
值类型和引用类型的区别
在 ECMAScript 中,数据类型可以分为值类型和引用类型。值类型包括数字、字符串、布尔值、null 和 undefined;引用类型包括对象、数组、函数等。
值类型的数据在赋值时,是将变量的值直接复制给目标变量,两个变量互不影响;而引用类型的数据在赋值时,只是将值的引用(地址)复制给目标变量,两个变量指向同一个地址,修改其中一个变量的值时,另一个变量的值也会发生变化。
var a = 1;
var b = a; // 值类型,b 的值为 1,与 a 互不影响
a = 2;
console.log(b); // 输出 1
var arr1 = [1, 2, 3];
var arr2 = arr1; // 引用类型,arr2 与 arr1 的值指向同一个地址
arr1.push(4);
console.log(arr2); // 输出 [1, 2, 3, 4]
示例一:引用类型的属性和方法
在 ECMAScript 中,引用类型的实例具有一些属性和方法。例如,Object 类型的实例具有 toString() 和 valueOf() 方法,Array 类型的实例具有 push() 和 concat() 方法。
var obj = {name: '张三', age: 18};
console.log(obj.toString()); // 输出 [object Object]
console.log(obj.valueOf()); // 输出 {name: "张三", age: 18}
var arr1 = [1, 2, 3];
arr1.push(4);
console.log(arr1); // 输出 [1, 2, 3, 4]
var arr2 = [5, 6, 7];
var arr3 = arr1.concat(arr2);
console.log(arr3); // 输出 [1, 2, 3, 4, 5, 6, 7]
示例二:值类型和引用类型在函数中的应用
在 ECMAScript 中,函数参数的传递采用的是值传递,因此对于值类型的数据,函数内对参数的修改不会影响到函数外的变量;而对于引用类型的数据,函数内对参数的修改会影响到函数外的变量。
function func1(num) { // 值类型参数
num += 10;
console.log(num);
}
var a = 5;
func1(a); // 输出 15
console.log(a); // 输出 5
function func2(arr) { // 引用类型参数
arr.push(4);
console.log(arr);
}
var b = [1, 2, 3];
func2(b); // 输出 [1, 2, 3, 4]
console.log(b); // 输出 [1, 2, 3, 4]
在 func1() 中对 num 的修改不会影响到 a 的值,这是因为 a 是一个值类型的变量,在函数 func1() 被调用时,将其值复制给了 num,num 的修改只影响到了 num 的值,不会影响 a 的值。
在 func2() 中对 arr 的修改会影响到 b 的值,这是因为 b 是一个引用类型的变量,在函数 func2() 被调用时,将其指向的地址复制给了 arr,arr 和 b 指向同一个地址,因此对 arr 的修改会同时修改 b 的值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型 - Python技术站