JS中的数据类型检测方法

(来自90分钟让你掌握JavaScript中的数据类型检测原理
JavaScript中提供了三种数据类型检测方法

typeof

/*
typeof:用来检测数据类型的运算符
	用法:typeof [value]
	@return
		返回值是一个字符串,包含对应的数据类型,例如:'number'、'object'、'function'、'undefined'、'boolean'、'symbol'
	@优点
		使用方便,在真实项目中会大量使用,尤其是在检测基本数据类型(除null)和函数类型值时
	@局限性
		typeof null = 'object'
		不能具体区分对象类型的值
		typeof [] = 'object'
		typeof /^$/ = 'object'
*/
// 应用
function func(n,m,callback){
	typeof n === 'undefined' ? n = 0 : null
	typeof callback === 'function' ? callback() : null
}

instanceof 和 constructor

/*
	instanceof:本来是用于检测实例是否隶属于某个类,也可以用于做数据类型检测,比如数组和正则
	@局限性
		不能用于检测基本数据类型
		只要在当前实例原型链出现过的类,结果都为true,并且用户可能会手动修改原型链的指向
	
	constructor:构造函数
		@局限性:constructor太容易被修改了
*/
console.log(1 instanceof Number) // false

Object.prototype.toString.call([value])

/*
	原理:调用Object上的toString方法,方法执行时this是要检测的数据
	@信息的模板:"[object 所属类]"
	在所有数据类型类中,它们的原型上都有toString方法,除Object.prototype.toString外,其余的都是将数据值转化为字符串
	Object.prototype.toString是检测当前实例隶属类的详细信息
*/
let _obj = {}
_obj.toString.call([value]) <=> Object.prototype.toString.call([value])

封装一个数据类型检测方法

let _obj = {
    isNumber:'Number',
    isBoolean:'Boolean',
    isString:'String',
    isNull:'Null',
    isUndefined:'Undefined',
    isSymbol:'Symbol',
    isPlainObject:'Object',
    isArray:'Array',
    isRegExp:'RegExp',
    isFunction:'Function',
    isWindow:'Window'
},_toString = _obj.toString,_type = {}

for(let key in _obj){
    if(!_obj.hasOwnProperty(key)){
        break
    }
    let reg = new RegExp("\[object"+_obj[key]+"\]")
    _type[key] = function anonymous(value){
        return reg.test(_toString.call(value))
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值