JavaScript引用数据类型详解:对象、数组与正则表达式

作者:闭包旅人时间:2026-10-24 22:58:48浏览:363

本文深入解析JavaScript中的引用数据类型,涵盖Object、Array和RegExp三大核心类型。详细阐述对象与数组在堆栈内存中的存储机制及引用传递特性,系统介绍字面量与构造函数的创建方式,并逐一讲解数组的高频操作方法,如concat、sort、find及遍历方法,最后简述正则表达式的创建语法,帮助开发者掌握引用类型的底层逻辑与实战技巧。

三种传递方式

  • 数据传递:变量赋值给另一个变量
  • 值传递:复制数据副本进行传递(适用于简单类型)
  • 引用传递:复制数据地址进行传递(适用于引用类型)

1、Object对象类型

【解释】:Object是内置构造函数,用于创建普通对象实例。

1、创建对象的语法

字面量方式创建对象示例

let obj = {
			uname : '阿飞',
			age : 22,
			sex : '男'
		}

使用构造函数方式创建

// Object:创建普通对象的构造函数
let obj = new Object( {uname : '阿飞', age : 22, sex : '男'} );

获取对象所有键名

let re = Object.keys(obj)

获取对象所有值

let re = Object.values(obj);

2、普通对象在内存中的存储机制

普通对象数据存储在堆内存中,栈内存中保存指向堆内存的地址。

三种传递方式

普通对象赋值时仅复制栈内存中的地址,而非堆内存中的数据 [普通对象赋值后,修改任一变量,另一对象数据值也会随之改变。]

三种传递方式

【小结】:

  1. 推荐使用字面量方式声明对象,而非 Object 构造函数
  2. Object.assign 静态方法用于创建新对象
  3. Object.keys 静态方法用于获取对象所有属性名
  4. Object.values 静态方法用于获取对象所有属性值

【堆与栈的区别】:

  • 堆和栈是内存中两种不同的数据存储区域
  • 简单类型数据存储在内存的栈空间中
  • 引用类型数据存储在内存的堆空间中,栈内存中存储的是引用类型的地址(房间号)

2、Array数组类型

1、创建数组的语法

字面量方式创建

let arr = [1, 2, 3];

构造函数方式创建

let ary = new Array(1, 2, 3);

2、数组在内存中的存储方式

数组在内存中的存储方式与普通对象一样

三种传递方式

数组在赋值时只是复制了栈内中的地址,而非堆内存中的数据

三种传递方式

3、数组常用方法

1、concat:用于拼接生成新数组

		let arr = [1, 2, 3];
		let ary1 = ['a', 'b', 'c', 'd'];
		let ary2 = [11, 222, 333];
		let reArr = arr.concat(ary1, ary2, '张飞', '关羽', '赵云');
		console.log(reArr);

2、join():用于将数组元素连接为字符串

		let arr1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
		let str = arr1.join('');
		console.log(str);

3、reverse:用于翻转数组顺序

		let arr3 = [1, 2, 3];
		let re = arr.reverse();
		console.log(re);

4、indexOf:查找元素在数组中首次出现的索引,未找到返回-1

        let arr1 = ['a', 'b', 'c', 'd', 'a', 'b', 'f'];
		let re1 = arr1.indexOf('a');
		console.log(re1);

5、lastIndexOf:查找元素在数组中最后一次出现的索引,未找到返回-1

		let re2 = arr1.lastIndexOf('b');
		console.log(re2);

6、sort:用于正序排列

		let arr2 = [3, 16, 22, 66, 123, 99];

		// sort正序排列:
		let re3 = arr2.sort(function (a, b) {
			return a - b;
		});

7、sort:用于倒序排列

		// sort倒序排列
		let arr2 = [3, 16, 22, 66, 123, 99];
		let re4 = arr2.sort(function (a, b) {
			return b - a;
		});

8、判断一个值是否为数组

		let a = [1, 2, 3];
		let re = Array.isArray(a);
		console.log(re);

9、将伪数组转换为真数组 Array.from(伪数组)

// 特别注意:要想把伪数组转换为真数组必须有length属性
		let o = {
			0 : 'a',
			1 : 'b',
			2 : 'c',
			3 : 'd',
			4 : 'e',
			5 : 'f',
			6 : 'h',
			length : 4,
		}

		let ary = Array.from(o);

		console.log( ary );

10、forEach:遍历数组

		let arr = [
					{uname :'阿飞', age : 22, sex : '男'},
					{uname :'张三丰', age : 23, sex : '男'},
					{uname :'李寻欢', age : 21, sex : '男'},
					{uname :'张三丰1', age : 23, sex : '男'},
					{uname :'李寻欢1', age : 21, sex : '男'},
					{uname :'张三丰2', age : 23, sex : '男'},
					{uname :'李寻欢2', age : 21, sex : '男'},
					{uname :'张三丰2', age : 23, sex : '男'},
					{uname :'李寻欢2', age : 21, sex : '男'},
				];
		arr.forEach( item => {
			console.log(`姓名:${item.uname},年龄${item.age},性别${item.sex}`);
		} );

11、find:查找首次满足条件的值并返回

		let re = [2, 6, 4, 7, 9, 3];
		let result = re.find(function (item, index, o) {
			return item > 5;
		})
		console.log(result);

12、findIndex:查找首次满足条件的值并返回其索引,未找到返回-1

		let result1 = re.findIndex(function (item, index, o) {
			return item > 40;
		});
		console.log(result1);

13、some:如果有一个元素满足条件则返回true

		let result2 = re.some(function (item, index, o) {
			return item > 5;
		})
		console.log(result2);

14、every:如果所有元素都满足条件返回true,否则返回false

		let result3 = re.every(function (item, index, o) {
			return item > 5;
		});
		console.log(result3);

15、filter:筛选满足条件的元素放入新数组并返回

		let result4 = re.filter(function (item, index, o) {
			return item > 5;
		});
		console.log(result4);

16、map:遍历数组执行回调函数,将所有结果放入新数组返回

		let result5 = re.map(function (item, index, o) {

			return item * item;

		});
		console.log(result5);

3、RegExp正则表达式

1、创建语法

字面量方式创建

let reg = /abc/;

构造函数方式创建

let reg1 = new RegExp(/abc/);

总结

本文到此结束,希望能对您有所帮助,欢迎继续关注本站更多内容!

作者最新文章