JS中判断数据类型的方法——水真深

typeof 、instanceof、constructor、jQuery.type()

1. typeof——返回对应的数据类型。
作用:区分基本数据类型
语法:typeof(变量名)

例:

   var str = "我是字符串";
   var num = 666;
   var obj = new Object();
   var arr = [1,2,3];
   var fn = function(){
       console.log("函数")
   }
   typeof(str)  //string
   typeof(num)  //number
   typeof(obj)  //object
   typeof(arr)  //object
   typeof(fn)  //function

问题:如果是引用类型(复杂数据类型:对象和数组),那么返回的都是Object,无法具体区分

2. instanceof——只适用于对象类型,不适用于简单类型的数据类型,返回boolean值
 作用:1:识别对象类型;
       2:判断一个对象是否属于某个构造函数的实例
 语法:变量名 instanceof 数据类型    ||     实例对象名 instaneof 构造函数

例1:只要是对象类型的都可以区分

arr instanceof Array                          //true
new Date() instanceof Date              //true

例2:使用instanceof来检验F是否属于构造函数fn的实例

var F = new fn();                           //实例化构造函数
F instanceof fn ;                           //true,说明F是属于fn的实例

问题:对于不同的构造函数,同一个实例都返回了true,如下F对Object同样返回了true

F instanceof Object                        //true 

instanceof原理:左边是一个实例对象,右边是一个构造函数,instanceof会检查构造函数的原型对象prototype是否在左边对象的原型链上,有则返回true,否则返回false.
instanecof内部执行函数:

instanceof (A,B) = {
  var L = A.__proto__;
   var R = B.prototype;
   if(L === R) {
       //A的内部属性__proto__指向B的原型对象
       return true;
   }
   return false;
}
那么我们来看下左边对象的原型链以及右边函数的原型对象上都发生了什么
F.__proto__===fn.prototype                 //true 实例化对象F的原型指向fn的原型对象
F.__proto__.proto__||fn.prototype.__proto__===Object.prototype  //true fn的原型又指向Object的原型对象
Object.prototype.__proto__                 //null

说明从F——fn——Object都在一条原型链上,其中fn和Object的prototype属性都存在于F所在的这条原型链上,所以,F针对于两个函数都返回了true

3.constructor——本身是prototype对象的一个属性,默认指向prototype属性所在的构造函数,此处我们用来判断数据类型。返回boolean值
作用:1.判断数据类型,包括数组、日期、对象等,可以区分清楚
语法:变量名.constructor === 数据类型

例:

str.constructor===String   //true
num.constructor===Number   //true
obj.constructor===Object   //true
arr.constructor===Array   //true
new Date().constructor===Date   //true
4.jQuery.type()——称之为万能
作用:判断数据类型。PS.其判断的结果显示都是小写的字符串形式
语法:jQuery.type(变量名)

例:包括日期、正则、undefined、null等都是可以判断的

jQuery.type(str)  //string
jQuery.type(num)   //number
jQuery.type(arr)   //array
jQuery.type(obj)  //object
jQuery.type(fn)   //funtion

总结:
typeof()——判断简单的数据类型,无法菊粉复杂数据类型,例如像Object和Array返回的都是Object
instanceof ——仅适用于对象来区分数据类型。同时还可以判断某个实例是否是某个构造函数的实例,但是会出现对应多个构造函数的情况
constructor——判断所有的数据类型。当然他的本质是盘算prototyep属性所在的函数的
jQuery.type()——判断所有的数据类型。

以上就是我的简单理解了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值