js中使用闭包封装一个安全数据类型检测方法[object Type]

在javascript使用typeof操作符并不能完全正确检测数据类型,比如:

typeof null; // 'object'
typeof []; // 'object'
typeof new Date(); // 'object'
typeof new RegExp(); // 'object'

但是,使用Object.prototype.toString方法会返回当前数据的一个字符串类型说明,格式为[object Type],Type为数据类型。例如数组:[object Array],日期:[object Date],字符串:[object String]等;以下是封装的共用方法:

function ValidType() {
	const validObj = {};
	const types = ['Number', 'String', 'Boolean', 'Object', 'Math', 'RegExp', 'Undefined', 'Null', 'Array', 'Function', 'Date']
	for (var index = 0; index < types.length; index++) {
		var type = types[index];
		(function (type) {
			validObj['is' + type] = function (value) {
				return Object.prototype.toString.call(value) === `[object ${type}]`
			}
		})(type)
	}
	return valid
}

var valid = ValidType();

valid.isNull(null); // true 返回类型为[object Null]
valid.isArray([]);  // true 返回类型为[object Array]
valid.isObject({}); // true 返回类型为[object Object]
valid.isDate(new Date()); // true 返回类型为[object Date]

当然,如果你学过ES6,你就应该知道使用let声明优化以上代码,let可以生成块级作用域,与闭包的作用一样,且代码更具可读性,易于理解;修改上面代码的for循环部分:

for (let index = 0; index < types.length; index++) {
	var type = types[index];
	valid['is' + type] = function (value) {
		return Object.prototype.toString.call(value) === `[object ${type}]`
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值