JS 判断数据类型方法 - 个人知识记录

54 阅读1分钟

一、typeof

1、定义&作用

  • 返回字符串,判断除null外的基础类型数据

2、语法

const { num, str, bol, nul, udf, sbl, big } = {
  num: 1,
  str: 'str',
  bol: true,
  udf: undefined,
  sbl: Symbol(),
  big: 999n,
  nul: null
}v

console.log(typeof num) // number 
console.log(typeof str) // string 
console.log(typeof bol) // boolean 
console.log(typeof udf) // undefined 
console.log(typeof sbl) // symbol 
console.log(typeof big) // bigint 
console.log(typeof nul) // object

二、instanceof

1、定义&作用

  • 返回布尔值,判断引用类型数据,但不能正确判断基础类型数据

2、语法

const { obj, obj2, arr, reg, date, doc, win, fn } = {
  obj: {},
  obj2: new Object(),
  arr: [],
  reg: /123/,
  date: new Date(),
  doc: document,
  win: window,
  fn: function () {}
}

console.log(obj instanceof Object) // true
console.log(obj2 instanceof Object) // true
console.log(arr instanceof Array) // true
console.log(reg instanceof RegExp) // true
console.log(date instanceof Date) // true
console.log(doc instanceof HTMLDocument) // true
console.log(win instanceof Window) // true
console.log(fn instanceof Function) // true

三、Object.prototype.toString.call()

1、定义&作用

  • 返回字符串:[object xxx], 判断数据类型

2、语法

// 基础数据类型
const { num, str, bol, nul, udf, sbl, big } = {
  num: 1,
  str: 'str',
  bol: true,
  udf: undefined,
  sbl: Symbol(),
  big: 999n,
  nul: null
}
console.log(Object.prototype.toString.call(num)) // [object Number]
console.log(Object.prototype.toString.call(str)) // [object String]
console.log(Object.prototype.toString.call(bol)) // [object Boolean]
console.log(Object.prototype.toString.call(udf)) // [object Undefined]
console.log(Object.prototype.toString.call(sbl)) // [object Symbol]
console.log(Object.prototype.toString.call(big)) // [object BigInt]
console.log(Object.prototype.toString.call(nul)) // [object Null]

// 引用数据类型
const { obj, obj2, arr, reg, date, doc, win, fn } = {
  obj: {},
  obj2: new Object(),
  arr: [],
  reg: /123/,
  date: new Date(),
  doc: document,
  win: window,
  fn: function () {}
}
console.log(Object.prototype.toString.call(obj)) // [object Object]
console.log(Object.prototype.toString.call(obj2)) // [object Object]
console.log(Object.prototype.toString.call(arr)) // [object Array]
console.log(Object.prototype.toString.call(reg)) // [object RegExp]
console.log(Object.prototype.toString.call(date)) // [object Date]
console.log(Object.prototype.toString.call(doc)) // [object HTMLDocument]
console.log(Object.prototype.toString.call(win)) // [object Window]
console.log(Object.prototype.toString.call(fn)) // [object Function]
}

3、简写

{}.toString.call

3.1、语法

console.log({}.toString.call(num)) // [object Number]
console.log({}.toString.call(obj)) // [object Object]
console.log({}.toString.call(fn)) // [object Function]

四、拓展

1、封装一个通用类型判断函数

function getType(xxx) {
  const type = typeof xxx
  // 如果是基础数据类型,直接返回
  if (type !== 'object') {
    return type
  }
  // 引用数据类型,正则返回结果
  return {}.toString.call(xxx).replace(/^\[object (\S+)\]$/, '$1')
}