介绍
如何在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中对数据类型进行检测