JavaScript数据类型检测总结

摘要:在js中,有四种用于检测数据类型的方式,分别是:typeof  用来检测数据类型的运算符instanceof    检测一个实例能否属于某个类constructor   构造函数Object.prototype.toString.call()  原型链上的Object对象的toString方法下面我

在js中,有四种用于检测数据类型的方式,分别是:

  • typeof  用来检测数据类型的运算符
  • instanceof    检测一个实例能否属于某个类
  • constructor   构造函数
  • Object.prototype.toString.call()  原型链上的Object对象的toString方法

下面我们就来分别详情一下上面四种方法的适用场景和局限性。

typeof 用来检测数据类型的运算符

使用typeof检测数据类型,返回值是字符串格式。能够返回的数据类型

是:"number","string","bolean","undefined","function","object"。

<script>  let arr = [1,2,3];  let reg = /\w/;  console.log(arr instanceof Array);  //true  console.log(arr instanceof Object);  //true  console.log(reg instanceof RegExp);  //true  console.log(reg instanceof Object);  //true</script>

前台全栈学习交流圈:866109386,面向1-3经验年前台开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

局限性:

  • 不能用于检测和解决字面量方式创立出来的基本数据类型值,即原始数据类型
  • instanceof的特性:只需在当前实例的原型链上的对象,我们用其检测出来都为true
  • 在类的原型继承中,我们最后检测出来的结果未必正确

constructor 构造函数

是函数原型上的属性,该属性指向的是构造函数本身。

作用和instsnceof非常类似,与instanceof不同的是,不仅可以解决引用数据类型,还可以解决原始数据类型。

<script>  let num = 12;  let obj = {};  console.log(num.constructor == Number);//true  console.log(obj.constructor == Object);//true</script>

但是要注意一点的是,当直接用(对象字面量或者原始数据).constructor时,最好加上()。为了便于了解,我们来看一个例子。

<script>  1.constructor === Number;    //报错,Invalid or unexceped token  (1).constructor === Number;    //true  {}.constructor === Number;    //报错,Invalid or unexceped token  ({}).constructor === Number;  //true</script>

前台全栈学习交流圈:866109386,面向1-3经验年前台开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

这主要是因为js内部解析方式造成的,js会把1.constructor解析成小数,这显然是不正当的,小数点后应该是数字,因而就会引发报错。js会把{}解析成语句块来执行,这时后面出现一个小数点显然也是不正当的,因而也会报错。为理解决这个问题,我们可以为表达式加上()使js能够正确解析。

局限性:我们可以把类的原型进行重写,在重写的过程中很可能把之前constructor给覆盖了,这样检测出来的结果就是不精确的

<script>   function Fn() {};  Fn.prototype = new Array;  var f = new Fn;  //f是一个函数,按道理说他的构造函数应该是Function,但是修改其原型链后,它的constructor变成了Array.  console.log(f.constructor == Array);  //true</script>

Object.prototype.toString.call() 原型链上的Object对象的toString方法

Object.prototype.toString的作用是返回当前方法的执行主体(方法中的this)所属类的详细信息,是最全面也是最常用的检测数据类型的方式。

返回值的类型为string类型。

<script>   console.log(Object.prototype.toString.call(1));          //[object Number]  console.log(Object.prototype.toString.call(/^sf/));        //[object RegExp]  console.log(Object.prototype.toString.call("hello"));      //[object String]  console.log(Object.prototype.toString.call(true));        //[object Boolean]  console.log(Object.prototype.toString.call(null));        //[object Null]  console.log(Object.prototype.toString.call(undefined));      //[object Undefined]  console.log(Object.prototype.toString.call(function() {}));    //[object Function]  console.log(typeof(Object.prototype.toString.call(function() {})));    //string</script>
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|】卡帕部落揭秘潮玩新宠,探究玩法(2023-12-14 09:45)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】如何开发搭建卡帕部落模式源码(2023-12-12 10:44)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
手机二维码手机访问领取大礼包
返回顶部