JavaScript的引用数据类型你了解多少

 更新时间:2022年02月11日 16:00:49   作者:执手天涯@  
这篇文章主要为大家详细介绍了JavaScript的引用数据类型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

三种传递

  • 数据传递:变量传递给另外一个变量
  • 值传递:会把数据复制一份传递,(简单类型
  • 引用传递:会把数据地址复制一份传递,(引用类型)

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/);

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!  

相关文章

  • JavaScript高级程序设计(第3版)学习笔记12 js正则表达式

    JavaScript高级程序设计(第3版)学习笔记12 js正则表达式

    前面在分析PhoneGap源码的时候,曾经总结过一次正则表达式的用法,为了不同系列文章的完整性,这里将那里的总结迁移过来
    2012-10-10
  • 详解JavaScript匿名函数和闭包

    详解JavaScript匿名函数和闭包

    这篇文章主要介绍了JavaScript匿名函数和闭包的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • javascript学习(一)构建自己的JS库

    javascript学习(一)构建自己的JS库

    库是一个饱受争议的热门话题。一种观点认为它是一种非常棒的工具,是任何开发者都不可或缺的;另一种观点则认为在不理解库的内部工作原理的情况下对库形成依赖,会助长懒惰的风气从而导致开发者素质下降
    2013-01-01
  • JavaScript DOM 学习第九章 选取范围的介绍

    JavaScript DOM 学习第九章 选取范围的介绍

    这一章会对范围对象做一些介绍。使用这个对象你能选取HTML文档中的任何部分然后根据选取信息作一些事情。最常见的范围对象是由用户选择的。
    2010-02-02
  • javascript函数作用域学习示例(js作用域)

    javascript函数作用域学习示例(js作用域)

    javascript中没有块级作用域,取而代之的javascript使用的是函数作用域,下面使用示例学习一下js作用域的使用方法
    2014-01-01
  • javascript编程起步(第一课)

    javascript编程起步(第一课)

    javascript编程起步(第一课)...
    2007-01-01
  • JavaScript中的document.referrer在各种浏览器测试结果

    JavaScript中的document.referrer在各种浏览器测试结果

    这篇文章主要介绍了JavaScript中的document.referrer在各种浏览器测试结果,包括在多种情况下每个浏览器能否用document.referrer取到值,非常珍贵的测试结果,需要的朋友可以参考下
    2014-07-07
  • js变量、作用域及内存详解

    js变量、作用域及内存详解

    本文主要详细分析了JS变量,作用域以及内存问题,同时附上非常多的实例,方便大家理解这3个概念,是篇不可多得的文章,希望对大家有所帮助
    2014-09-09
  • JavaScript中函数的常用写法及调用方法

    JavaScript中函数的常用写法及调用方法

    这篇文章介绍了JavaScript中函数的常用写法及调用方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 好好了解一下Cookie(强烈推荐)

    好好了解一下Cookie(强烈推荐)

    Cookie是由服务器端生成,发送给User-Agent,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器,对cookie知识感兴趣的朋友一起学习吧
    2016-06-06

最新评论