Skip to content
Robert Yao edited this page Jul 6, 2023 · 9 revisions

JavaScript 发展至今,一直保持着弱类型(weakly typed)语言的特性,也就一直没有提供准确的检测数据类型的内置方法。因此开发者就不得不自己编写校验数据类型的函数方法,Types.js 也是因为这个原因才诞生的。

根据 MDN 的《JavaScript data types and data structures》这篇文档介绍,JavaScript 将数据分为了以下几个大类:

Primitive values(原始值)

其中原始值是是我们最常用的“数据”,JavaScript 有7个原始值:

  1. Null
  2. Undefined
  3. Boolean
  4. Number
  5. BigInt
  6. String
  7. Symbol

利用 typeof 关键字判断原始值

原始值基本都是可以使用 JavaScript 中提供的 typeof 关键字来判断数据类型的:

let value

typeof value // -> 'undefined'
typeof false // -> 'boolean'
typeof 23 // -> 'number'
typeof BigInt(66) // -> 'bigint'
typeof 'JavaScript' // -> 'string'
typeof Symbol('prop') // -> 'symbol'

前面之所以说原始值基本都是可以用 typeof 来判断数据类型,是因为 null 是一个例外:

typeof null // -> 'object'

null 是一个对象,是不是觉得很奇怪?

typeof 关键字对判断对象(引用类型)的值无能为力

除原始值以外,JavaScript 中其它的值都应该是对象(引用)类型的值。typeof 关键对其它的值的判断几乎就没有什么做了,例如以下判断:

typeof [] // -> 'object'
typeof {} // -> 'object'
typeof function(){} // -> 'object'
typeof class {} // -> 'object'
typeof new Date() // -> 'object'
typeof new RegExp() // -> 'object'
typeof new Error() // -> 'object'

typeof 的结果都一样:'object'(对象),而作为开发者是希望知道这些“对象”具体是什么“对象”的。

Clone this wiki locally