这篇文章主要介绍了射流研究…判断数据类型的几种常用方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
Java脚本语言中常见数据类型有数字、字符串、布尔、对象、数组、Json、函数、日期、正则表达式、错误、未定义、空等十几种100 .ES6还有新增的数据类型有符号、集合、地图等。在实际应用中,我们经常需要判断数据类型,现在我归纳几种方法,希望对大家有所帮助。
typeof 判断(最常用)
类型关于是射流研究…提供的一个运算符,专门用来检测一个变量的类型。类型关于有2种使用方式:类型属于(表达式)和类型关于变量名,第一种是对表达式做运算,第二种是对变量做运算。
函数doSomething() {
console.log('Hello World!');
}
控制台。日志(类型为1);//数字
console.log(类型为你好’);//字符串
控制台。日志(类型为[]);//对象
console.log(类型为{ });//对象
控制台。做某事类型);//函数
控制台。日志(类型为真);//布尔型
console.log(新日期的类型());//对象
console.log(新正则表达式()的类型);//对象
控制台。log(JSON。纤细的的类型({
名称:"甄灿华"
}));//字符串
console.log(类型为null);//对象
console.log(未定义的类型);//未定义
console.log(类型属于(新错误(‘错误!)));//对象
控制台。日志(a的类型);//未定义
console.log(符号类型());//符号
console.log(新集合的类型());//对象
console.log(新地图的类型());//对象
从上面打印结果可以看出,类型不能区分引用型数据的类型和零。另我们可以使用Array.isArray(arr)将数组类型的数据从中筛选出来。
instanceof 判断(了解)
实例关于用来检测构造函数的原型属性是否出现在某个实例对象的原型链上。语法:对象(实例对象)构造函数的实例(构造函数)。是的话返回没错,否则返回错误。所以,实例关于运算符只能用作对象的判断。针对类型关于不能判断的引用型数据,我们可以使用实例关于运算符。
设arr1=[1,2,3];
设obj1={
名称: '小明'
};
函数person(){ }
let person 1=新人();
控制台。log(arr数组的1个实例);//真
控制台。log(arr对象的1个实例);//真,数组是目标的子类
console.log(obj1 instanceof对象);//真
控制台。log(数组的obj 1实例);//假
console.log(函数的的人员实例,对象的的人员实例);//true true
console.log(对象的空实例);//假
控制台。log(person 1人的实例,person 1函数的实例,person 1对象的实例);//真假真
//字符串对象和日期对象都属于目标类型
设str1='你好
设str 2=new String();
设str3=新字符串('你好');
let myDate=new Date();
控制台。log(字符串的str 1实例,对象的str 1实例);//假,假
console.log(字符串的str2实例of,对象的str 2的实例);//真,真
控制台。日志(字符串的str3实例of,对象的str 3的实例);//真,真
console.log(日期的我的日期实例,对象的我的日期实例);//真,真
从上面的判断可以看出,实例关于的使用限制很多,而且还不能很清晰方便的判断出一个实例是数组还是对象或方法。
针对上面方法的弊端,我们可以使用对象。原型上的原生toString()方法来检测数据的类型。
Object.prototype.toString.call() 判断(最靠谱)
目标是射流研究…提供的原生对象,Object.prototype.toString对任何变量都会返回这样一个字符串[对象类]',类就是射流研究…内置对象的构造函数的名字打电话。是用来改变调用函数作用域的。
Object.prototype.toString()在toString方法被调用时执行下面的操作步骤:
获取这对象的[[类]]属性的值。(所以使用呼叫来改变这的指向)
将字符串[对象,第一步获取的值,以及']'拼接成新的字符串并返回。
[[类]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性。在规范中,[[类]]是这么定义的:内部属性的描述,[[类]]是一个字符串值,表明了该对象的类型。
读了上面的说明,用呼叫的关键地方就在第一步,获取的是这对象,不加呼叫改变作用域时这指向的是对象。原型。
函数doSomething() {
console.log('Hello World!');
}
//使用对象。原型。toString.call来判断
控制台。日志(对象。原型。托斯特林。调用(1));//[对象编号]
控制台。日志(对象。原型。托斯特林。打电话('你好');//[对象字符串]
控制台。日志(对象。原型。托斯特林。call(false));//[对象布尔值]
控制台。日志(对象。原型。托斯特林。调用({ });//[对象对象]
控制台。日志(对象。原型。托斯特林。调用([1,2,3]);//[对象数组]
控制台。日志(对象。原型。托斯特林。调用(新错误('错误!)));//[对象错误]
控制台。日志(对象。原型。托斯特林。call(new Date()));//[对象日期]
控制台。日志(对象。原型。托斯特林。调用(new RegExp());//[对象正则表达式]
控制台。日志(对象。原型。托斯特林。打电话(做某事));//[对象函数]
控制台。日志(对象。原型。托斯特林。call(null));//[对象为空]
控制台。日志(对象。原型。托斯特林。打电话(未定义));//[对象未定义]
控制台。日志(对象。原型。托斯特林。调用(JSON。stringify({
名称:"镇沅湖"
})));//[对象字符串]
控制台。日志(对象。原型。托斯特林。调用(数学));//[对象数学]
控制台。日志(对象。原型。托斯特林。调用(符号(' ABC '));//[对象符号]
控制台。日志(对象。原型。托斯特林。调用(new Set()));//[对象集]
控制台。日志(对象。原型。托斯特林。调用(new Map()));//[对象映射]
但在实际应用时我们只想获取返回的结果中数组的第二项,比如[对象编号]',我们只想要数字这段字符,那么我们可以写个函数进行过滤:
//通过定义一个公共函数获取数据类型
函数getTypeName(val) {
设str=对象。原型。托斯特林。调用(val);
返回/^\[object(。*)\]$/.exec(str)[1];
}
控制台。log(getTypeName(false));//布尔型
控制台。log(gettype name());//未定义
控制台。log(getTypeName(null));//Null
上面的问题完美解决。
constructor 判断(比较常用)
每一个对象实例都可以通过建筑者对象来访问它的构造函数。射流研究…中内置了一些构造函数:对象、数组、函数、日期、正则表达式、字符串等。我们可以通过数据的建筑者是否与其构造函数相等来判断数据的类型。
var arr=[];
var obj={ };
var Date=new Date();
var num=110
var str='你好
var getName=function(){ };
var sym=Symbol();
var Set=new Set();
var Map=new Map();
arr.constructor===Array//真
obj.constructor===Object//真
date.constructor===Date//真
str.constructor===String//真
getname。构造函数===函数;//真
sym.constructor===Symbol//真
set.constructor===Set//真
map.constructor===Map //true
但是这种方式仍然有个弊端,就是构造器所指向的的构造函数是可以被修改的。
函数名(姓名){
this.name=name
}
函数学生(年龄){
this.age=年龄;
}
//将构造函数名字的实例赋给学生的原型,学生的原型的构造函数会发生改变,将不再指向自身。
Stuent.prototype=新名称('张三');
学生。原型。构造函数===名称;//真
学生。原型。构造函数===stu ent//假
以上就是我在项目中用到过的数据类型的判断方法,具体使用哪一种,还需要根据自己的实际需求来判断选择。
到此这篇关于射流研究…数据类型判断的几种常用方法的文章就介绍到这了,更多相关射流研究…数据类型判断内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。