Javascript数据类型确定的简要说明

Javascript数据类型确定的简要说明
使用类型检测数据类型

Javascript有两种类型:基本数据类型(未定义、字符串、空、布尔、函数、对象)和对象类型。

但是如果你试图使用typeof检测对象类型都返回到对象和不可区分
类型的空/ /对象
typeof {} / /对象
document.childnodes / /对象类型
类型 / / / / 物
种新的(数) / /对象
使用构造函数属性来检测类型的构造函数。
{构造函数=数组
document.childnodes = / /真正的节点列表
/ / / 。构造函数= regexp /真实

功能isregexp(obj){
返回对象类型的对象的对象obj.constructor regexp = = = = = =;
正则表达式对象检测

函数isnull(obj){
返回obj = null;
}
大部分的测试类型可以做结构检测,和空是特别直接的比较。然而,在iframe的数组类型是不能够检测到正确的类型,这是一个缺陷,构建检测。同时,在旧版本IE中,DOM和BOM的结构无法访问。

使用object.prototype.tostring判断
object.prototype.tostring.call({ }) / / } {对象数组
object.prototype.tostring.call( / / / { })正则表达式对象
object.prototype.tostring.call(1) / / {数量}对象
看看toString方法中使用jQuery的源代码
*
* jQuery Javascript库v1.11.2
* /
无功class2type = {}; / /保存JS数据类型

jquery.each(布尔数字符串函数数组日期RegExp对象错误(。分裂),功能(我的名字)常用的遍历和分配基本类型映射{ / / class2type存储结构,关键对象类型} {
class2type {{对象+姓名+}} = name.tolowercase();
});
类型:功能(obj){
如果(obj = null){ / /如果空返回空字符串
+ 返回对象;
}
然后给出一个 / /如果参数类型的对象或函数,它是在映射表ToString密钥名称和返回,如果不使用typeof得到正确的类型。
返回类型的obj =对象类型的obj = 的功能| |
class2type { tostring.call(obj)} | |对象:
Typeof obj;
},
**************************** / /
JQuery.type( / / / / regexp)
JQuery.type(新)(数) / /
这可以使用ToString方法,因为对象的不同将重新定义自己的toString方法检测

谈论一些特殊类型的测试
上述调试是在IE8中进行的,因为不确定是不是Javascript中的一个关键词,它可以分配在IE8(后来的版本不可分)。如果我们看看jquery.type源代码,我们可以看到,定义的检测是通过类undefined.jquery.type做没有检测到老也未定义的正确性得到一个纯粹的定义,你可以使用无效0
此外,DOM,在旧IE使用objec.prototype.tostring BOM对象的检测值{物}
但是Chrome下的结果是完全不同的(Chrome可以检测真实类型)
理解jQuery检测的特殊类型
IsWindow:功能(obj){ / / ECMA窗口全球法规作为一个全局对象,和global.window =全球
返回obj = null对象= = obj.window;
},
isplainobject:功能(obj){
无功的关键;
如果(obj jquery.type(obj)| |!!= =对象| | | | obj.nodetype jquery.iswindow(obj)){
返回false;
}
{ / /尝试以确定其最近原型对象包含isprototypeof属性
如果(obj.constructor
hasown.call(obj,构造函数)
hasown.call(obj.constructor.prototype,isprototypeof )){
返回false;
}
} catch(e){
返回false;
}
如果(支持。ownlast){
对于(关键在obj){
返回hasown.call(obj,关键);
}
}

相对于jQuery改进的质量框架
型无功class2type = { / /可能会反映在class2type对象,从而减少是功能
{对象这} :文件
{对象htmlcollection } 列表
{object StaticNodeList}: NodeList
{对象domwindow } 窗口
对象全局}:窗口

南:
未定义:未定义
};
类型:功能(obj,STR){
VaR结果= class2type {(obj = = null | | obj!= = obj)目标:serialize.call(obj)} obj.nodename | | | |# ; / /连载= = class2type.tostring
如果(result.charat(0)= = =# ){ / /兼容旧的浏览器和个案处理,如window.opera
使用ie678窗口= =文件 /真实,虚假文件=窗口有神奇的性质
如果(obj = = obj.document obj.document!= obj){ / / DOM节点类型,使用BOM对象(单)和项目(节点)来判断
结果窗口;返回构造函数名称
如果(obj.nodetype = = = 9 }){
结果文档;返回构造函数名称
else if(obj。被叫方){ }
结果参数;返回构造函数名称
} else if(需(obj。长度)目标。项目){
结果=列表; / /处理节点集
{人}
结果:serialize.call(obj)。片(8、1);
}
}
如果(STR){
返回结果;
}
返回结果;
}
类数组
类数组是一种特殊的数据类型。它们类似于数组,但不能使用数组。他们有一个明显的特征,它们含有长度属性,和关键值设置在整数阶。这样的一个数组可以转化为通过array.slice真实阵列(),因此利用阵列提供的方法。

普通类的数组参数,document.forms,document.getelementsbyclassname,和其他一些特殊的物品,如:列表、htmlcollection,等。
var arraylike = {
0:a
1:B
2:C
长度:3
}
在正常情况下可以通过array.slice.call数组转换,但旧的IE htmlcollection,NodeList不是对象的子类,不能使用这种方法,需要建立一个空的数组,然后遍历推节点为空数组,数组可以回到新的一代,在同一时间区分窗口和字符串对象之间。因为这种对象也包含长度> = 0(长度不能修改,但不能数组)。

jQuery如何处理类数组
makearray:功能(ARR,结果){
VaR RET =结果| | { };
如果(ARR!= NULL){
如果(isarraylike(对象(ARR))){
JQuery.merge(RET,
型ARR =字符串
{是}:ARR
/ / jquery.merge联合数组,如果字符串的封装成一个阵列的河边,不是一个世界的合并
{人}
push.call(RET,ARR);
}
}
返回页首;
}
如何处理类的数组Ext.js
ToArray:功能(个,开始,结束){
如果(个| | { iterable.length!!)
返回{ };非数组类型直接返回{ }
}
如果(typeof Iterable = 'String'){
个= iterable.split(' '); / /字符串分解
}
如果(supportssliceonnodelist){
返回slice.call(迭代,开始| | | |端0个。长度); / /列表支持
}
var数组{ },
我;
开始的开始| | = 0;
结束=结束((结束< 0)iterable.length +结束:结束):iterable.length;
对于(i =开始;i <结束;我+ +){
Array.push(个{我});
}
返回的数组;
}
大众framework.js句柄类数组
切片:W3C功能(节点,开始,结束){ / / var W3C = doc.dispatchevent;IE9开始支持W3C事件模型
返回factorys.slice.call(节点,开始、结束);
}函数(节点,开始,结束){
var = { },
n = nodes.length;
如果(=无效0 | |类型=数系统(结束)){
开始= parseInt(开始,10)| | 0;
结束= =无效:parseInt(0 N,10);
如果(开始< 0){
开始= n;
}
如果(结束> n){
结束= n;
}
如果(结束< 0){
结束= n;
}
对于(var i =开始;i <结束;+ i i){
我开始} =节点{ };
}
}
返回页首;
这是本文的全部内容,希望能对大家有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部