理解 JavaScript 基本类型及其功能
介绍
在之前的指南中,我深入介绍了 JavaScript 对象以及它们在语言中的功能。我还提到,对象只是两种主要 JavaScript 数据类型之一,另一种是原语。我将在这里更深入地介绍原语的组成、它们的作用以及多种变体。
JavaScript 如何处理数据
与 HTML 一样,JavaScript 是一种客户端语言,运行时无需编译,因此是解释型的。但是,与 HTML(一种标记语言)不同,JavaScript 是一种脚本语言。
这意味着它的语法或代码是编程语言的一个子集,它充当程序之间的中介来生成数据。它本质上可以通过使用脚本来指导其他程序。
JavaScript 遵循 ECMAScript 标准,脚本语言依赖该标准,总共包含八种数据类型。其中一种数据类型是对象,另一种是基元,有七种变体。
七种类型的基元包括:
- 数字
- 细绳
- 布尔值
- 大整数
- 无效的
- 不明确的
- 象征
关于原语,要记住的最重要的一点是,它们表示没有方法且无法更改的数据。它们在内存中的大小也是固定的。
变量保存原始类型的实际值,但它们仅保存对引用类型值的引用。
如果基元中包含值,则可以将其归因于变量。变量保存对引用类型的值的引用。下面是变量如何引用值的示例:
var a_num = 1.45 // a_num holds the reference to the actual value
基本类型与对象
原始类型与对象不同,因为它们没有属性,因此它们的值无法更改。它们是不可变的。它们也没有方法,可以视为代码或数据。当调用原始类型时,JavaScript 语言将调用其对象对应部分并根据需要在两者之间切换。
因此,在现实中,在 JavaScript 的裸代码中,它会形成一个对象,使用它并返回其结果。这意味着,尽管原语对于 JavaScript 语言至关重要,但它们也通过被复制和销毁而与对象紧密相关。
变量可以保存原始数据或复合数据(数据和对象的数组或集群),而无需绑定到对象。属性是指实际上绑定到对象的变量。
让我们看一下这些原语的一些功能,作为其功能的示例。
原语示例及其用途
const theBiggestInt = 2003199254740456n
const hugeString = BigInt("2003199254740456")
// ↪ 9007199254740991n
Number是一个包含 8 个字节数据的原始类型。
Number.NEGATIVE_INFINITY // -Infinity
Number.POSITIVE_INFINITY // Infinity
Symbol可以用作对象属性的键。下面是使用apple作为对象的示例:
var key = Symbol()
var an_obj = {
[key]: ’apple’
}
当使用alert(obj)命令添加、减去或打印(显示在控制台上)对象时,基元就会发挥作用。在每种情况下,在 JavaScript 中执行这三种操作之前,对象都会转换为基元。
使用 JS++ 自动装箱和拆箱基本类型
使用 JS++(JavaScript 的扩展)时,您可以利用自动装箱功能。当JS++(JavaScript 的扩展)编译器将原始数据类型转换为其对应的对象包装器类时,就会发生这种情况,从某种意义上说,使用包装器将原始值转换为对象。
例如,字符串将被转换为System.String,该类恰好是字符串原始类型的包装类。JS++ 引入了 vanilla JavaScript 所缺乏的比较方法。
因此,JS++ 编译器使用System.String对象包装器类自动装箱字符串值,以提供比较方法。以下是比较字符串 blue 和 red 的示例:
import System;
Comparison compare1 = "blue".compare("red"); // Valid due to auto-boxing
Comparison compare2 = (new System.String("blue")).compare("red"); // Equivalent boxed expression
自动装箱的另一个示例是当 JavaScript 访问原始变量时,以及当使用原始函数将.call和.apply函数用于.this参数时。以下是变量访问的示例:
var part = 'apple’.substr(0,2)
当对象包装类转换为其相应的原始数据类型时,JS++ 中也会发生拆箱现象。
结论
尽管 JavasScript 的大多数方面似乎都专注于对象以及代码中的所有内容与对象的关系,但情况并非总是如此。原语也是 JavaScript 语言的一部分。这七个原语保存着对语言至关重要的信息,并使其得以运行。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~