Lara

JS 笔记 — JavaScript 中 6 - 8 种左右的语言类型

原文链接: dev.to

JavasSript 很奇怪,目前在 JavasSript 中存在八种(近似)ECMAScript 语言类型(在本文发表时)。我们倾向于说 JavasSript 中的所有内容都是一个对象,但事实并非如此。实际上, 虽然在 JavasSript 中大多数东西表现得像对象,但这并不意味着它们真的是对象。因此,深入研究 JavasSript 中存在的有效类型是一件以备不时之需的好事情。

在继续之前,我想说清楚:我指的是 一般值类型 ,而不是 基本类型 的概念。如果我指的是基本类型,那么就不会讨论对象,那是需要再找一天讨论的另一种不同的 JS 问题。

那么现在,为了深入这 8 种左右的类型以及 "近似" 意义的本质,我们需要一位有帮助的朋友的指导……

A drawing of a bunny wearing an eyepatch, and a beret.

来见见 BUNNSBOS!

BUNNSBOS 将帮助我们理解这些类型,如下:

  • Boolean

  • Undefined

  • Number

  • Null (近似)

  • String

  • BigInt (非官方的)

  • Object

  • Symbol

你可能会质疑是否还有其他类型没有列出。这就是短语 "表现得像对象" 所指的 — 如数组或函数等等。正如我朋友所说的那样,这些可以归类为 “奢侈对象”,值得专门用一篇文章来介绍。这里我只关注 ECMAScript 规范中已识别的类型。 😬

那么,让我们来快速过一遍这八个独特可爱的孩子。警告: 以下将是极其简化的定义。

  • Boolean:只能输出 true 或 false 值。

  • Undefined:缺省值;(或者在变量的情况下)当前没有值的变量容器。

  • Number:可以对其运行数学运算的值(使用浮点格式)。

  • Null:把这看作是另一种故意写“这里什么都没有”的方式,它与零或空不一样。 😬😬😬

  • String:只是简单的文本。

  • BigInt:一个非常大的数字系统。可以达到计算机中可分配的内存的最大容量。

  • Object:一个数据容器。

  • Symbol:可以动态生成匿名唯一值的函数。

现在我知道你在想,“ 难道 BUNNSSOB 不是比 BUNNSBOS 更有意义吗?这个缩略词中没有两个S分成两个单词”。— 我会说,“是的,但是,看看那可爱的贝雷帽!”

所以我们非常粗略地定义了八种类型。我想开始分析这些类型的奇怪部分 — 主要是 BigIntNull。我们从简单的开始:BigInt

BigInt 是 JavaScript 中的一种有效类型,或者更恰当地说,它存在于 Node 和 Chrome 的 V8 JavaScript 引擎以及 Firefox 的SpiderMonkey 引擎中。BigInt 之所以奇怪,是因为它可以被使用和测试,但并不属于 ECMAScript 规范 的正式部分。因此,使用并查询它是有效的,但它不是规范的正式部分。注意:根据 Node 或浏览器的版本,您可能无法测试 BigInt,这就加强了在该类型上使用星号的必要性。

> typeof 143
'number'

> typeof 143n
'bigint'

现在来看超级怪异的一个:Null。可以在 if 语句中检查 null,但是测试null类型会得到各种各样的结果。

> typeof null
'object'

引用前端开发大牛 Ire Aderinokun 的话来说:

在 JavaScript 的第一个实现中,值由两部分表示:类型标记和实际值。有5个类型标记可使用,而用于引用对象的标记是 0 。但是,Null 被表示为空指针,对于大多数平台来说是 0x00 。由于这种相似性,null 就有了对应于一个对象的 0 类型标记。

不幸的是,更重要的一点是 Null 输出的类型是 Object 是一个 bug。一个我们必须忍受的 bug,以免如果我们决定修复它的话,从社会的角度讲,我们就会很轻易地破坏太多的应用和网站。

所以我们现在背上了 Null 的十字架 — 带着这个十字架,我们必须面对这样一个事实,我们至少可以检查 BigInt 的类型,但是不能检查 Null 的类型。我们的新朋友,BUNNSBOS 死了,BUNSBOS 万岁。

A drawing of a butt wearing an eyepatch, and a beret.

  • Boolean

  • Undefined

  • Number

  • String

  • BigInt (非官方的)

  • Object

  • Symbol

现在,我们为小圆面包(BUNS) 哭泣(SOB)。

😭


引用资源: