判断数据类型

129 阅读1分钟

原始数据类型

  • 表示空:Undefined,Null
  • 基础三大件:Number,String,Boolean
  • 两个新类型:Symbol,BigInt

列举几种引用对象:

  • 普通对象 Object
  • 数组对象 Array
  • 正则对象 RegExp
  • 函数 Function

typeof

只能判断原始数据类型, 其他就是functionobject

// 一般用来判断原始数据类型
// 缺陷: 其他就是function 和 object
typeof alert === "function" // true
typeof null === 'object'    // true
typeof [] === 'object'      // true

instanceof

// 一般用来判断引用数据类型
// 缺陷
console.log(1 instanceof Number)                // false
console.log('jack' instanceof String)           // false
console.log(true instanceof Boolean)            // false
console.log(Symbol('jack') instanceof Symbol)   // false

Object.prototype.toString.call

// 万金油
function getType(target: any) {
  const str = Object.prototype.toString.call(target);
  const type = str.slice(8, str.length - 1);
  return type.toLowerCase();
}
console.log(getType(null)); // 'null'
console.log(getType(undefined)); // 'undefined'

console.log(getType(100)); // 'number'
console.log(getType(NaN)); // 'number'
console.log(getType(Infinity)); // 'number'
console.log(getType(-Infinity)); // 'number'

console.log(getType("abc")); // 'string'
console.log(getType(true)); // 'boolean'
console.log(getType(Symbol())); // 'symbol'
console.log(getType(BigInt(100))); // 'bigint'
console.log(getType({})); // 'object'
console.log(getType([])); // 'array'
console.log(getType(alert)); // 'function'
console.log(getType(new Map())); // 'map'
console.log(getType(new WeakMap())); // 'weakmap'
console.log(getType(new Set())); // 'set'
console.log(getType(new WeakSet())); // 'weakset'
console.log(getType(new Date())); // 'date'
console.log(getType(new RegExp("a"))); // 'regexp'
console.log(getType(new Error())); // 'error'
console.log(getType(Promise.resolve())); // 'promise'

constructor

// 缺陷: 无法判断undefined 和 null
let a = 1
a.constructor === Number // true