原始数据类型
- 表示空:Undefined,Null
- 基础三大件:Number,String,Boolean
- 两个新类型:Symbol,BigInt
列举几种引用对象:
- 普通对象 Object
- 数组对象 Array
- 正则对象 RegExp
- 函数 Function
typeof
只能判断原始数据类型, 其他就是function 和 object
// 一般用来判断原始数据类型
// 缺陷: 其他就是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