Skip to content
文档章节

判断数据类型

JS中有哪些数据类型

  1. 要判断类型,就要列举 JS 中到底有哪些类型。JS类型分类可 基本数据类型对象

  2. 其中基本类型有 7 种,分别是

  • Boolean 布尔类型
  • null
  • undefined 表示变量未定义
  • Number 数字类型
  • BigInt 任意精度整数
  • String 字符串
  • Symbol
  1. 对象 Object

常见的类型如,基本对象, Array, Date, Map, Set, Function 等

基本数据类型判断方法

使用 typeof

js
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof 'str'); // string
console.log(typeof undefined); // undefined
console.log(typeof BigInt(2432141241)); // bigint
console.log(typeof Symbol(1)); // symbol
console.log(typeof null); // object

console.log(typeof []); // object
console.log(typeof function () {}); // function
console.log(typeof {}); // object

基本数据类型中 null 是特殊的,因此 typeof 不能确定null

对于对象使用 typeof , function 是特殊的,其他的都是 object

判断对象

使用 instanceof

只适用于对象,而不使用普通数据类型

js
console.log(2 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false

console.log([] instanceof Array); // true
console.log(function () {} instanceof Function); // true
console.log({} instanceof Object); // true

使用 constructor

一个对象数据的 constructor 指向这个对象的构造函数

js
console.log((2).constructor === Number); // true
console.log(true.constructor === Boolean); // true
console.log('str'.constructor === String); // true
console.log([].constructor === Array); // true
console.log(function () {}.constructor === Function); // true
console.log({}.constructor === Object); // true

TIP

constructor 有两个作用,一是判断数据的类型,二是对象实例通过 constrcutor  对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor 就不能用来判断数据类型了:

js
function Fn(){};
 
Fn.prototype = new Array();
 
var f = new Fn();
 
console.log(f.constructor===Fn);    // false
console.log(f.constructor===Array); // true

使用 Object.prototype.toString.call() 判断

使用此方法效果如下,该方法可以判断基本数据类型和对象类型,是个不错的办法。

js
Object.prototype.toString.call(''); // [object String]
Object.prototype.toString.call(1); // [object Number]
Object.prototype.toString.call(true); // [object Boolean]
Object.prototype.toString.call(Symbol(1)); // [object Symbol]
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(null); // [object Null]
Object.prototype.toString.call(new Function()); // [object Function]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new RegExp()); // [object RegExp]
Object.prototype.toString.call(new Error()); // [object Error]

判断类型的代码

js
function getType(target) {
  const type = typeof target;

  // undefined 类型
  if (!type) return type;

  // 对象类型或者Null, 此时必须使用 Object.prototype.toString 了
  // 格式 [Object Function] [Object Date] 等
  if (type === 'object') {
    return Object.prototype.toString.call(target).split(' ')[1].split(']')[0].toLowerCase();
  }

  // 基本数据类型
  return type;
}

上面的代码太复杂,简化直接使用 Object.prototype.toString.call

js
function getType(target) {
   return Object.prototype.toString.call(target).split(' ')[1].split(']')[0].toLowerCase();
}