JS中类型的检测

在js开发中,经常需要检测一个变量的类型。现在就总结一下常见的检测变量类型的方法,以及它们的适用场景。

一、typeof

要检测一个变量是不是基本数据类型,typeof是最佳的工具。也就是说,typeof是确定一个变量是字符串、数值、布尔值还是undefined的最佳工具。但如果变量是一个对象或者null,则typeof操作符会都返回object:

var num = 123;
var str = 'abcdef';
var bool = true;
var arr = [1, 2, 3, 4];
var json = {name:'wenzi', age:25};
var func = function(){ console.log('this is function'); }
var und = undefined;
var nul = null;
var date = new Date();
var reg = /^[a-zA-Z]{5,20}$/;
var error= new Error();
console.log(
typeof num,
typeof str,
typeof bool,
typeof arr,
typeof json,
typeof func,
typeof und,
typeof nul,
typeof date,
typeof reg,
typeof error
);
// number string boolean object object function undefined object object object object

从上面的结果可以看出,在检测基本数据类型的时候,typeof是非常得力的助手,但是在检测引用类型的值时,这个操作符的用处不大。通常情况下,我们并不是想知道某个值是对象,而是想知道他是什么类型的对象。为此,ECMAScript提供了instanceof操作符,语法如下所示:

result = variable instanceof constructor 

如果变量是给定引用类型的实例,那么instanceof操作符会返回true。

console.log(
num instanceof Number,
str instanceof String,
bool instanceof Boolean,
arr instanceof Array,
json instanceof Object,
func instanceof Function,
und instanceof Object,
nul instanceof Object,
date instanceof Date,
reg instanceof RegExp,
error instanceof Error
)
// num : false
// str : false
// bool : false
// arr : true
// json : true
// func : true
// und : false
// nul : false
// date : true
// reg : true
// error : true

从上面的运行结果我们可以看到,num, str和bool没有检测出他的类型,但是我们使用下面的方式创建num,是可以检测出类型的:

var num = new Number(123);
var str = new String(‘abcdef’);
var boolean = new Boolean(true);

也就是说,根据规定,所有引用类型的值都是Object的实例。因此,在检测一个引用类型和Object构造函数时,instanceof操作符始终会返回true。如果使用instanceof操作符检测基本数据类型的值,则该操作符始终返回false,因为基本数据类型不是对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值