JavaScript 中有多少种数据类型,它们是什么,以及什么被视为类型?

RTW*_*RTW 1 javascript types

我很好奇 JS 有多少种类型,因为我从其他可靠的来源读到了相互矛盾的答案:

如果我们查看ECMAScript 规范,有 8 种类型:

  • 未定义、空、布尔、字符串、符号、数字、BigInt 和对象

看来function是算作对象了。


如果我们查看MDN,他们说有 9 种类型:

六种基本数据类型,由 typeof 运算符检查:

  1. 未定义:实例类型===“未定义”
  2. 布尔值:实例类型===“布尔值”
  3. 数字:实例类型===“数字”
  4. 字符串:实例类型===“字符串”
  5. BigInt : typeof 实例 === "bigint"
  6. 符号:实例类型===“符号”

结构类型:

  1. 对象:实例类型===“对象”。任何构造对象实例的特殊非数据但结构类型也用作数据结构:new Object、new Array、new Map、new Set、new WeakMap、new WeakSet、new Date 以及几乎所有使用 new 关键字创建的内容;
  2. Function :一种非数据结构,尽管它也回答 typeof 运算符: typeof instance === “function”。这只是函数的特殊简写,尽管每个函数构造函数都是从对象构造函数派生的。

结构根原语:

  1. null :实例类型===“对象”。特殊的原始类型对其值有额外的用途:如果对象不是继承的,则显示 null;

其中哪一项是正确的?

geo*_*org 5

当前版本的 ECMAScript 规范定义了 8 种值类型:

  1. 不明确的
  2. 无效的
  3. 布尔值
  4. 细绳
  5. 象征
  6. 数字
  7. 大整型
  8. 目的

https://262.ecma-international.org/11.0/#sec-ecmascript-language-types

运算typeof符是 JavaScript 中造成混乱的一大根源,因为它返回的并不总是值的实际类型。typeof 的转换表(https://262.ecma-international.org/11.0/#sec-typeof-operator)是这样的

值类型 结果
不明确的 undefined
无效的 object !!!
布尔值 boolean
数字 number
细绳 string
象征 symbol
大整型 bigint
对象(未实现 [[Call]]) object
对象(实现[[调用]]) function !!!

请注意标有的两个例外!!!

更让我们困惑的是,该语言还为这 4 种基本类型提供了包装函数

  1. 布尔值
  2. 数字
  3. 细绳
  4. 大整型

这些功能

  • 当用 调用时new,返回转换为相应包装对象的参数(BooleanNumber

  • 当不带调用时new,返回转换为相应原始值(布尔值、数字等)的参数

new当在“对象”上下文中使用原语时(例如),这些函数也会被隐式调用(在或“构造函数”模式下"foo".length