《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型

《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技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jquery中validate与form插件提交的方式小结

    来详细讲解一下“jquery中validate与form插件提交的方式小结”的完整攻略。 一、什么是jQuery Validation? jQuery Validation 是一个非常流行的 jQuery 表单验证插件,它可以帮助我们验证用户输入的数据是否合法。使用jQuery Validation可以方便地进行表单验证,使用方式简单易懂,可以兼容不同浏览器…

    JavaScript 2023年6月10日
    00
  • JavaScript设计模式—单例模式详解【四种基本形式】

    JavaScript设计模式—单例模式详解【四种基本形式】 单例模式是一种常用的设计模式,它是指在整个应用程序中只需要实例化一次的类。在JavaScript中,单例模式具有着特殊的意义。因为JavaScript是一种无状态语言,每次请求网页都会加载一次JavaScript文件,如果我们没使用单例模式来管理,可能会在内存中生成多个对象实例,造成资源的浪费,…

    JavaScript 2023年6月10日
    00
  • js获取指定日期前后的日期代码

    下面我将为您详细讲解JS如何获取指定日期前后的日期: 步骤一:使用Date对象创建指定日期 要获取指定日期前后的日期,首先需要使用Date对象来创建指定日期,通过设置年份、月份和日期来构造一个日期对象。代码示例如下: let currentDate = new Date("2021-10-01"); console.log(current…

    JavaScript 2023年5月27日
    00
  • 详解JS对象封装的常用方式

    关于JS对象封装的常用方式,我可以提供以下完整攻略。 一、什么是对象封装 对象封装是一种将数据和相应的方法捆绑在一起的面向对象编程技术,以实现数据封装和信息隐藏的目的,有助于提高代码的可读性、可维护性、可扩展性和代码复用性。 在JavaScript中,对象封装可以通过创建对象或构造函数等方式来实现。常用编写对象封装的方式有:对象字面量、构造函数、原型和ES6…

    JavaScript 2023年5月27日
    00
  • JavaScript中的replace()方法使用详解

    JavaScript中的replace()方法使用详解 在JavaScript编程中,replace()方法是十分常用的一个字符串方法。它用于替换字符串中匹配指定模式的部分。在本篇攻略中,我将详细讲解replace()方法的各项使用方法及注意事项。 基本用法 replace()方法的语法如下: str.replace(regexp|substr, newSu…

    JavaScript 2023年6月10日
    00
  • 解析PHP 使用curl提交json格式数据

    解析PHP使用curl提交json格式数据 什么是curl? curl是一个可用于传输数据的工具,支持多种协议,例如HTTP、FTP、SMTP等。在PHP中,我们可以使用curl向远程服务器发送HTTP请求,并获取对方的响应数据。 使用curl提交json格式数据 步骤一: 设置请求头 在使用curl向远程服务器发送请求时,我们需要设置请求头。在提交json…

    JavaScript 2023年6月11日
    00
  • JS获取地址栏参数的两种方法(简单实用)

    JS获取地址栏参数是前端开发中经常用到的功能,一般用于获取URL中的参数信息来完成一些操作。下面我将详细讲解 JS获取地址栏参数的两种方法。 方法一:使用URLSearchParams对象 URLSearchParams对象是ES6中新增的一个API,用于获取URL中的参数信息。使用该对象获取地址栏参数的代码示例如下: const urlParams = n…

    JavaScript 2023年6月10日
    00
  • 浅谈JS中的bind方法与函数柯里化

    浅谈JS中的bind方法与函数柯里化 一、bind方法 1.1 bind方法的作用 bind()是JavaScript中所有函数对象都有的方法,它的作用是创建一个新的函数,称为绑定函数。当调用绑定函数时,this被设置为调用bind()时传入的第一个参数,该参数是this的绑定值,而后继参数则作为绑定函数的参数供调用。这种绑定是可以撤销的。 示例代码: va…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部