】
既然 Date、Array、Function都是引用数据类型(复合数据类型),可是为什么只有 Array 和Date 类型,返回的都是object, 而Function类型返回的就是function ?
什么什么原因?
JS 不就这么设计的么?
只有 undefined
、boolean
、number
、string
、function
、bigint
、symbol
几种类型单独返回,剩下的全是 object
。
看 MDN 的文檔
Function
屬於數據類型,而 Array
和 Date
只是内置对象。
JS 的几种基本类型(typeof
运算的结果),typeof
的运算结果只可能是以下几种基本类型之一:
"string"
"number"
"boolean"
"undefined"
"object"
"function"
"symbol"
<-- ES2015 加入"bigint"
<-- ES2020 加入
其中,有几点要注意
undefined
表示无值,是单独一种类型null
表示空对象,是object
类型的一种值,所以typeof null
是"object"
- 函数也是对象,所以
(function a() {}) instanceof Object === true
,正因为如此 TypeScript 中可以使用接口来声明函数类型 - 不仅
boolean
,所以类型的值都可以用于逻辑判断(比如if (...)
这里的...
部分),但是判真/假有一定的规则,可以参考 MDN 的 Truthy 和 Falsy 两部分内容 Date
、Array
都是具体的类,是更高一级的类型,其基本类型都是object
,也就是说typeof
计算的结果都是object
。如果想判断具体是不是某种类类型,可以用instanceof
来判断;也可以用obj.constructor.name
获取具体的类名(但并不一定每种情况都能正确获取,因为会有很多神奇的写法来定义类)