【前端面试小册】10种数据类型,以及判断方式

151 阅读1分钟

1、数据基本类型

  • Function
  • Object
  • Array
  • Undefined
  • Null
  • Boolean
  • String
  • Number
  • Symbol
  • Bigint

2、获取数据类型

const getType = (type) => {
    return Object.prototype.toString .call(type).match(/\s+(\w+)/)[1] 
}

解析

let type =  function(){}
Object.prototype.toString.call(type);// [object Function]
match(/\s+(\w+)/)[1] // 匹配的就是空格后面的Function

3、判断目标是否为某个对象

const getType = (type) => {
   return Object.prototype.toString.call(type).match(/\s+(\w+)/)[1]
}

const isType = (target,type) => {
   return type.toLocaleLowerCase() === getType(target).toLocaleLowerCase()
}

4、Demo

let type1 =  function(){}
let type2 =  undefined
let type3 =  null
let type4 = {}
let type5 =  false
let type6 =  '5'
let type7 =  5
let type8 =  []
let type9 =  Symbol('id')
let type10 =  BigInt(10)


 console.log(getType(type1));// Function
 console.log(getType(type2));// Undefined
 console.log(getType(type3));// Null
 console.log(getType(type4));// Object
 console.log(getType(type5));// Boolean
 console.log(getType(type6));// String
 console.log(getType(type7));// Number

console.log(getType(type9));// Symbol
console.log(getType(type10));// BigInt

console.log(isType(23,number)); // true
console.log(isType('前端面试资源',string)); // true

5、思考

通过上面的方法我们已经得到了一个完成的函数类型判断方法;而判断的主要逻辑是用

Object.prototype.toString.call(type).match(/\s+(\w+)/)[1]

获取字符串然后去做对比,那么

问题

为什么不直接用toString做判断了?

原因

Array,function等类型作为Object的实例都重写了toString方法

demo

console.log("jerry".toString());//jerry

console.log((1).toString());//1

console.log([1,2].toString());//1,2

console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)

console.log(function(){}.toString());//function (){}

console.log(null.toString());//error

console.log(undefined.toString());//error