js类型检测

1、typeof  (返回值为数据类型)

1 console.log(typeof "");
2 console.log(typeof 1);
3 console.log(typeof true);
4 console.log(typeof null);
5 console.log(typeof undefined);
6 console.log(typeof []);
7 console.log(typeof function(){});
8 console.log(typeof {});

控制台输出:string,number,boolean,object,undefined,object,function,object

总结,当需要判断数据类型是否为数组或者null时,不能用typeof

 

2、instanceof  (返回值为布尔值,true,false)

1 console.log("1" instanceof String);   //false
2 console.log(1 instanceof Number);     //false
3 console.log(true instanceof Boolean);  //false
4 console.log(null instanceof Null);
5 console.log(undefined instanceof Undefined);
6 console.log([] instanceof Array);    //true
7 console.log(function(){} instanceof Function);  / true
8 console.log({} instanceof Object); //true

总结,instanceof只能检测出数组,方法,对象

typeof与instanof比较,得出,检测一个变量的类型是否是数组时,用 XX instanceof Array检测,其余的类型都可以用typeof检测

 

3.constructor

          

1 console.log(("1").constructor === String); 
2 console.log((1).constructor === Number);
3 console.log((true).constructor === Boolean);
4console.log(([]).constructor === Array);
5 console.log((function() {}).constructor === Function);
6 console.log(({}).constructor === Object);

全部输出结果都为true

乍一看,constructor似乎完全可以应对基本数据类型和引用数据类型,都能检测出数据类型,事实上并不是如此,来看看为什么:

1 function Fn(){};
2 
3 Fn.prototype=new Array();
4 
5 var f=new Fn();
6 
7 console.log(f.constructor===Fn);
8 console.log(f.constructor===Array);

我声明了一个构造函数,并且把他的原型指向了Array的原型,所以这种情况下,constructor也显得力不从心了。

看到这里,是不是觉得绝望了。没关系,终极解决办法就是第四种办法,看过jQuery源码的人都知道,jQuery实际上就是采用这个方法进行数据类型检测的。

 

4、Object.prototype.toString.call()

1 var a = Object.prototype.toString;
 2 
 3 console.log(a.call("aaa"));
 4 console.log(a.call(1));
 5 console.log(a.call(true));
 6 console.log(a.call(null));
 7 console.log(a.call(undefined));
 8 console.log(a.call([]));
 9 console.log(a.call(function() {}));
10 console.log(a.call({}));

可以看到,所有的数据类型,这个办法都可以判断出来。那就有人质疑了,假如我把他的原型改动一下呢?如你所愿,我们看一下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值