Javascript实现类型判断的几种方式

  1. 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
  1. 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
  1. 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
  1. 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等不香吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值