我很好奇 JS 中有多少类型,因为我从其他可靠的来源阅读了相互矛盾的答案:
如果我们看一下 ECMAScript spec,有 8 种类型:
似乎 function
被视为对象。
如果我们看看 MDN,他们说有 9 种类型:
六种原始数据类型,由 typeof 运算符检查:
结构类型:
结构根基元:
以下哪个是正确的?
答案 0 :(得分:4)
当前版本的 ECMAScript 规范定义了 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)的转换表是这样的
val 的类型 | 结果 |
---|---|
未定义 | undefined |
空 | object !!! |
布尔值 | boolean |
数量 | number |
字符串 | string |
符号 | symbol |
BigInt | bigint |
对象(不实现[[Call]]) | object |
对象(实现 [[Call]]) | function !!! |
注意用 !!!
标记的两个例外
更让我们困惑的是,该语言还为这 4 种原始类型提供了包装函数
这些功能
当使用 new
调用时,返回它们的参数转换为相应的包装对象(Boolean
、Number
等)
在没有 new
的情况下调用时,返回它们的参数转换为相应的原始值(布尔值、数字等)
当在“对象”上下文(例如 new
)中使用原语时,这些函数也被隐式调用(在 "foo".length
或“构造函数”模式下)