ecmascript数据类型-JavaScript 核心技术发展揭晓:2.1 基本数据类型和变量对象&2

2023-08-23 0 7,473 百度已收录

2.1 基本数据类型变量对象

最新的ECMAScript标准定义了七种数据类型,其中包括六种基本数据类型和一种引用数据类型(Object)。

基本数据类型表如表2-1所示。

表2-1 基本数据类型表

由于目前常用的浏览器版本不支持Symbol,且babel编译的代码量太大,建议实际中不要使用Symbol。

我们来解释一个问题,有一个非常简单的案例如下所示。

现在需要考虑的是,当函数fn运行时,其中的变量a1、a2、a3存储在哪里?

当函数运行时,会创建一个执行环境。 这个执行环境称为执行上下文(ExecutionContext,我们将在后续章节中详细介绍)。 在执行上下文中,创建了一个称为变量对象(VO,在后续章节中详细研究)的特殊对象。 基本数据类型通常存储在变量对象中,如图2-1所示。

图2-1 变量对象

变量对象也存在于堆内存中,并且由于变量对象具有特殊的功能,因此建议在理解时始终将其与堆内存空间区分开来。

2.2 引用数据类型和堆内存空间

引用数据类型(Object)的值是存储在堆内存空间中的对象。 在JavaScript中,不允许直接访问堆内存空间中的数据,因此无法直接操作对象的堆内存空间。 当操作一个对象时ecmascript数据类型,您实际上是在操作对该对象的引用,而不是实际的对象。 因此ecmascript数据类型,引用数据类型是通过引用来访问的。 这里的引用可以理解为变量对象中存储的地址,与堆内存中的对象相关联。

为了更好地理解变量对象和堆内存,下面用反例和图来解释。

如图2-2所示,当我们要访问堆内存空间中的引用数据类型时,实际上是通过引用(地址指针)来访问的。

图 2-2 变量对象地址表引脚

在后端笔试题中,我们经常会遇到这样类似的题。

在demo01中,基本数据类型具有复制行为。 在 demo02 中,引用数据类型发生复制行为。

当变量对象中的数据被复制时,新变量将被赋予新值。 在demo01中,通过varb=a复制后,虽然a和b的值都等于20,但看起来是相互独立的。 所以当我们改变b的值时,a的值不会改变。 具体如图2-3所示。

图 2-3 变量对象复制

在demo02中,通过varn=m发生复制行为。 引用类型的复制还会手动为新变量分配新值并将其保存在变量对象中。 但不同的是,这个新值只是一个引用类型的地址指针。 当地址指针相同时,虽然它们是相互独立的,但它们指向的具体对象实际上是相同的。

因此,当n改变时,m也会改变,这就是引用类型的特性。 具体如图2-4所示。

图 2-4 变量对象引用副本

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 ecmascript ecmascript数据类型-JavaScript 核心技术发展揭晓:2.1 基本数据类型和变量对象&2 https://www.wkzy.net/game/144106.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务