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