返回

JS数据类型和浅拷贝的知识总结

前端

编程中的基础知识是极为重要,而基本数据类型对于编程的基本数据操作尤为重要,它们将决定着我们进行数据处理与展示的基本操作逻辑和应用可能。

在JavaScript中的基本数据类型包括:

  • Number(数值):表示数值,支持整数和小数(实数)。

  • String(文本):用于存放文本,由一组字符组成。

  • Boolean(逻辑):用于存放逻辑值,它可以是true或者false(真或假)。

  • Symbol(符号):用于存放唯一标识符。在ES6中引入,主要用于不可变的值和类成员。

  • Null(空值):用于存放没有值的值,常用于某些编程方法中。

  • Undefined(未定义):用于存放未被明确定义的值,常用于声明没有被明确赋予值的某个编程逻辑块(如方法或属性)。

以上是基本的七种数据类型,但若要进行更深入的探讨时,需要对数据类型进行更细致的划类:

  • **基本数据类型:** 基本数据类型由JavaScript自身定义,不能直接被程序修改,这类型包括数字、文本、逻辑、符号、空值和未定义。

  • **引用数据类型:** 引用数据类型由程序创建,也是程序可以修改的,它们由地址指针定义,地址指向存放地址的值(或者称之为真正的值)的内存地址,引用数据类型包括对象、函数、和类。

在JavaScript中,除了未定义外的基本类型在基本类型之间进行相互类型化时,类型之间会进行类型转变,而若两种类型无法转型时,则返回 NaN,如无法转换成数字的文本类型。

基本数据类型之间互相进行数据操作时,则无法改变其原值,基本数据类型创建时是在内存栈上进行创建的,而在对引用数据类型之间进行数据操作时,就会对拷贝时拷贝该引用数据类型的值,这就需要进行浅拷贝和深拷贝的概念了。

浅拷贝: 浅拷贝是将引用数据类型创建一个新的拷贝时,仅拷贝内存地址,不拷贝内存值,这会导致若修改了浅拷贝的值时,原有值也将被修改。

深拷贝: 深拷贝是将引用数据类型创建新的拷贝时,进行递归的创建新的拷贝以拷贝新的值,这会导致每个创建值都是全新的,若修改了其中一个值的变更时,并不会变更其他值的变更。

在JS中进行深拷贝没有直接的办法,但我们可以通过JSON.stringify()和JSON.parse()来进行值的获取以及创建新的值,来实现数据新的值的拷贝,而不是直接进行原始值的直接引用拷贝。