- typeof运算符
用来判断基本类型和函数
console.log(typeof 1) // number
console.log(typeof 'a') // string
console.log(typeof true) // boolean
console.log(typeof Symbol('a')) // symbol
console.log(typeof 100n) // bigint
console.log(typeof undefined) // undefined
console.log(typeof null) // object
// 除此之外还能识别函数
console.log(typeof function(){}) // function
- instanceof运算符
a instanceof B
判断B.prototype
是否在A的原型链上__proto__
let a = [1,2,3]
console.log(a instanceof(Array)) // true
console.log(a instanceof(Object))// true
- constructor属性
null和undefined是无效的对象,是不存在constructor这个属性的。几乎不会出现在生产中
function Person(){}
let a = [1,2,3]
let b = {}
let c = new Person
console.log(a.constructor) // [Function: Array]
console.log(b.constructor) // [Function: Object]
console.log(c.constructor) // [Function: Person]
console.log(Person.constructor) // [Function: Function]
console.log(null.constructor) // TypeError: Cannot read property 'constructor' of null
console.log(undefined.constructor) // TypeError: Cannot read property 'constructor' of undefined
- Object.prototype.toString.call(obj)
日常开发必备方法,能精确判断出类型以及内建引用类型
const isType = (el) => {
return Object.prototype.toString.call(el).slice(8, -1)
}
console.log(isType('abc')) ; // [object String]
console.log(isType(11)) ; // [object Number]
console.log(isType(true)) ; // [object Boolean]
console.log(isType(undefined)) ; // [object Undefined]
console.log(isType(null)) ; // [object Null]
console.log(isType([])) ; // [object Array]
console.log(isType(new RegExp())) ; // [object RegExp]
console.log(isType(new Function())) ; // [object Function]
console.log(isType(new Date())) ; // [object Date]
console.log(isType(new Map())) ; // [object Map]
console.log(isType(new Set())) ; // [object Set]
console.log(isType(this)) ; //[object Window] window是全局对象global的引用
ps: 开发中几乎不会手写这些,lodash, underscore等不香吗