JavaScript数据类型及深浅拷贝详解

需积分: 10 0 下载量 123 浏览量 更新于2024-01-19 收藏 14KB DOCX 举报
在JavaScript中,数据类型分为基本数据类型和引用数据类型。 基本数据类型包括:Null,undefined,Boolean,Number,String。ES6新增的基本数据类型是Symbol,用于表示独一无二的值。ES10新增的基本数据类型是BigInt,用于表示任意大的整数。 引用数据类型包括:Object,包括Object、Array、function、Date、RegExp等。引用数据类型本质上是由一组无序的键值对组成。引用数据类型的值同时存储在栈内存和堆内存中。在栈内存中保存的是该对象的指针,指向堆内存中实际的值。 在JavaScript中,所有的值的类型都是以上述8种之一。基本数据类型直接存储在栈内存中,占据空间小且大小固定,属于被频繁使用的数据。而引用数据类型占据空间大且大小不固定。 在进行赋值操作时,如果是基本数据类型,会直接复制其值到新的变量;而对于引用数据类型,则会复制该对象的指针值。也就是说,当我们把一个引用数据类型的值赋值给另外一个变量时,实际上复制的是对象的指针,指向同一块内存地址。 深拷贝和浅拷贝是针对复杂数据类型(即引用数据类型)来说的。 浅拷贝只拷贝一层,复制的是对象的引用,而不会完全复制对象的所有属性和方法。当修改其中一个对象时,另一个对象也会受到影响。 深拷贝则是层层拷贝,复制的是对象的所有属性和方法,每一层都会进行复制。即使修改其中一个对象,另一个对象也不会受到影响。 深拷贝可以通过递归来实现,遍历对象的所有属性和方法,进行复制。也可以使用JSON.stringify()和JSON.parse()方法来实现深拷贝,将对象转换成字符串再转换回对象。 需要注意的是,深拷贝可能会导致循环引用的问题,即对象的属性之间存在相互引用的情况。为了避免循环引用,可以使用额外的数据结构来保存已经访问过的对象,当遇到循环引用时,直接返回保存的对象。 综上所述,JavaScript中的数据类型分为基本数据类型和引用数据类型。基本数据类型直接存储在栈内存中,而引用数据类型同时存储在栈内存和堆内存中。在赋值操作中,基本数据类型直接复制值,而引用数据类型复制的是对象的指针。深拷贝和浅拷贝是针对引用数据类型来说的,深拷贝复制了对象的所有属性和方法,而浅拷贝只拷贝一层。
2022-01-04 上传
2023-02-28 上传