手机版

通过jQuery学习js类型判断的技巧

时间:2021-08-23 来源:互联网 编辑:宝哥软件园 浏览:

1.的类型在isfunction中不可靠

源代码:

var is Function=function is function(obj){//support : Chrome=57,Firefox=52//在某些浏览器中,typeof返回HTML对象元素//(即` type of document . create element(' object ')==' function ' `)的' function '。//我们不想将*任何* DOM节点归类为函数,返回类型为obj==='function '类型为obj.nodeType!==' number};Typeof是为了区分数据类型,以下是MDN中总结的typeof中的所有现有值

问题1:我们都知道null类型的结果是“object”,但是为什么呢?MDN给出了答案:因为null是一个null指针,在大多数平台上用0x00来表示,而js在实现初期使用0作为对象的标签,所以null也被判断为对象。

第二个问题:既然typeof可以判断函数,为什么jquery还要另外判断typeof obj.nodeType!=='数字'?

很久很久以前,在那些古老的浏览器中:

1.document.body.childnodes//function类型这将出现在古代狩猎3

2.document . create element(' object ')//函数的类型类似,还有' embed' 'applet ',会出现在老火狐中,但新版本目前还不存在

3 . type of/s////函数将出现在古代浏览器中,目前将被判断为对象

从以上问题可以看出,在古代浏览器中,通过typeof判断数据类型是极其不可靠的,所以在jquery的isFunction判断中加入了判断检测到的对象是否是dom对象。2.可靠的数据类型判断

源代码:

var class 2 type={ };var ToString=class 2 type . ToString;//填充class2type映射,没有未定义的jquery.each('布尔数字字符串函数数组date regexp对象错误符号'。split('),function(i,name){ class 2 type['[object ' name ']']=name . tolowercase();} );函数ToType(obj){ if(obj==null){ return obj“”;}//Support:仅限Android=2.3(functionish RegExp)返回类型obj==='object' ||类型obj===' function '?class 2 type[ToString . call(obj)]| | ' object ' : type of obj;} jquery在代码中做了这些事情:

1.jquery首先提取toString方法

2.分割写入的类型字符串,并将其存储在class2type中。class2type的数据结构如下:

3.定义toType方法,因为toString(null)会得到“[object undefined]”的结果,所以需要独立判断null。请注意,null没有toString方法,因此“null”是由obj“”获得的

4.单独判断null后,是三元运算符:相当于

1 if(type of obj==' object ' | | type of obj==' function '){ 2//因为上面提到typeof /s/是一个函数,所以需要通过toString来详细判断。3 //对于无法判断的数据类型,默认为object 4 retrun class 2 type[tostring。调用(obj)] | |。5} else {6 //通过上面的typeof type判断表判断非对象函数是非常可靠的,所以直接使用原生方法7返回typeof obj8}结论:布尔型、数字型、字符串型、函数型、数组型、日期型、正则表达式型、对象型、错误型、符号型、未定义型的数据类型可以判断为空,需要综合判断

此外,jquery还额外判断当前对象是否为window,只使用以下方法:

var isWindow=函数isWindow(obj ) {return obj!=null obj===obj.window};前方!=null是为了防止开发人员在调用函数isWindow时报告“typeerror :不清楚无法读取null/undefined的属性‘window’”的错误。

还有isArrayLike,判断当前对象是否是类数组对象,类数组对象是什么。我建议你百度一下

函数isArrayLike(obj ) {//仅支持:实iOS 8.2(模拟器中不可再现)/“入住”登记用于防止吉特舞乐错误(gh-2145)//由于假阴性,此处不使用hasOwn关于IEvar长度=!长度中的obj 'length ',type=ToType(obj);if(IsFunction(obj)| | IsWindow(obj)){ return false;}返回类型===' array ' | | length===0 | |长度类型==='数字中的长度0(长度-1);}首先判断目标文件中是否有长度属性并取出长度

然后排除目标文件是否是窗户及功能

最后取值条件:1.是否是数组(类数组对象集合当然包括数组) 2.存在长度属性但长度是0 3.判定长度是数字且大于零,并在目标文件对象中存在长度-1属性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:通过jQuery学习js类型判断的技巧是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。