如何在javascript中对数据类型进行检测

  介绍

如何在javascript中对数据类型进行检测?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>在javascript中数据类型

<强>值类型:布尔(布尔),数值(数量),字符(字符串)、空(Null),未定义(定义)

<强>引用类型:对象(对象),函数(函数),数组(数组),日期(日期),正则(正则表达式)等等。

<>强检测方式之typeof

console.log (typeof 未定义)//& # 39;未定义# 39;   console.log (typeof 零),//对象   console.log (typeof  true),//& # 39;布尔# 39;   console.log (typeof  123),//& # 39;数字# 39;   console.log (typeof 南),//& # 39;数字# 39;   console.log (typeof “abc"),//& # 39;字符串# 39;   console.log (typeof 函数(),{}),//& # 39;函数# 39;   var  arr=[];   console.log (typeof {}),//& # 39;对象# 39;   console.log (typeof  arr)//& # 39;对象# 39;

从上面可以看出来用类来检测,不严谨。

零被检测成为对象了,,null值表示一个空对象指针,用“操作符检测零值时会返回对象的原因,这是在设计ECMAscript时候存在的一些错误。

同样是js不严谨的一种表现形式,而数组也被检测成为了一个对象,所以用这种方式不严谨。

<>强检测方式之toString.call()

console.log (toString.call(定义),),//,& # 39;[object 窗口]& # 39;& # 39;   console.log (toString.call (null),),//, & # 39; [object 窗口]& # 39;   console.log (toString.call(真实),),//,& # 39;[object 布尔]& # 39;   console.log (toString.call (123),),//, & # 39; [object 数字]& # 39;   console.log (toString.call(南),),//,& # 39;[object 数字]& # 39;   console.log (toString.call (“abc"),),//, & # 39; [object 字符串]& # 39;   console.log (toString.call (function (), {})),//, & # 39; [object 功能]& # 39;   var  arr=[];   console.log (toString.call ({}),),//, & # 39; [object 对象]& # 39;   console.log (toString.call (arr),),//, & # 39; [object 数组)& # 39;

可以看出来出了定义和空这两个,其他的检测都还是比较严谨的。

其中toString()函数是窗口的一个不可枚举函数,继承自对象

还可以写成这样:

window.toString.call(& # 39;你好# 39;);,//,“[object 字符串]“;   Object.prototype.toString.call(& # 39;你好# 39;);,//,“[object 字符串]“

<>强检测方式之构造函数

console.log(& # 39;哈哈# 39;.constructor ==,字符串);//,真的   console.log ([] .constructor ===,数组);//,真的   console.log ({} .constructor ===,对象);//,真的   console.log (true.constructor ===,布尔);//,真的   var  a =, 111,,//,此处必须要用变量来代表数字,不然会报的错,从这也能看出来js是一门不严谨的语言   console.log (a.constructor ===,数字),,//,真正的

我们通过把实例的构造函数指向其他地方,来改变它的构造函数,就不安全了,不推荐使用如下代码所示:

var  AAA =,函数(){},,//,定义一个AAA对象   AAA.prototype =, {   ,说:函数(),{   警报才能(& # 39;你好# 39;);   ,}   }   var  arr1 =, new 数组();,//,定义一个数组   arr1.constructor =, function  AAA(){},,//,这里可以改变实例的构造函数。   时间=arr1.__proto__  AAA.prototype;,//,此处改变了原型链   console.log (arr1.constructor);//, AAA   console.log (arr1  instanceof  AAA);,//, true 原型链已经改变,arr1 已经不属于数组了。   console.log (arr1  instanceof 数组);//,假的//,下面我们来让AAA的原型链连到,数组上   时间=AAA.prototype.__proto__  Array.prototype;   console.log (arr1  instanceof 数组),//,真正的

<>强检测方式之运算符

检测是否是某一对象的实例

console.log ([], instanceof 数组);//,真的   console.log ({}, instanceof 对象);//,真的   console.log(& # 39;哈哈# 39;,instanceof 字符串);//,假的   console.log (true  instanceof 布尔);//,假的   console.log (1, instanceof 数字),//,假

前面两个是真的,后面的全是假的说明了用instanceof B来检测的前提条件必须是A, B都为对象,通过下面的方式就可以看出来了

var  a =, new  (1);   var  b =, new 字符串(& # 39;哈哈# 39;);   var  t =, new 布尔(真正的);   console.log (a  instanceof 数字);//,真的   console.log (b  instanceof 字符串);//,真的   console.log (t  instanceof 布尔);,//,真正的

如何在javascript中对数据类型进行检测