我们知道,运营商的检测对象类型:类型中,Javascript,和对象的构造函数属性:

1)typeof运算符typeof是一元运算符,并返回结果是一个字符串,说明算法的类型。例如,数但类型的能力是有限的,它的返回日期和regexp类型是对象,如:

类{ }; / /对象
类{ }; / /对象
种新的(日期); / /对象

所以这是唯一有用的是当不同的对象和原始类型。有一个对象类型和另一种类型的对象,你必须使用其他的方法,如:instanceof运算符或对象的构造函数的属。

2)instanceof运算符。instanceof运算符要求左侧的操作数是一个对象,右边的操作数是对象的类或构造函数的名称。如果对象是一个类或一个构造函数的一个实例,instanceof运算符返回TRUE。如果对象是不指定的类或函数的实例,或对象为空,则返回false。如:

{ }是阵列; / /真的
{ }实例对象; / /真的
{ }是正则表达式; / /假
新的日期是日期; / /真的

所以,你可以使用instanceof操作符来判断一个对象是一个数组类型:

功能ISArray(ARR){
返回数组arr中;
}

3)构造函数属性。在Javascript,每个对象都有一个构造函数属性引用的构造函数来初始化对象,通常用于确定未知对象的类型。如果给定值的知识是通过typeof运算符,它将原来的值或对象。如果是一个对象,你可以使用构造函数属性来确定其类型。所以判断数组也可以写成这样的功能:

功能ISArray(ARR){
返回类型= = = = arr.constructor数组arr的对象;
}

在许多情况下,我们可以使用instanceof运算符或对象来检测一个对象是否是一个数组构造函数属性。例如,许多Javascript框架使用这两种方法来确定一个对象是否是一个数组类型。但是当检测横框数组(十字架)的页面,它失败了。原因是,在不同的框架创建的阵列(iframe)不分享彼此的原型性质。例如:
复制代码代码如下所示:

窗口。指针函数(){
无功iframe_arr =新窗口。帧{ 0 }。阵列;
警报(iframe_arr instanceof Array); / /假
警报(iframe_arr.constructor = = array); / /假
}


一种检测精确的方法是看到Ajaxian,与十原型链调用toString()方法:Object.prototype.toString(),它可以解决上述的十字框架的问题。当object.prototype.tostring(O)执行时,执行以下步骤:1)得到对象的O类属性)连接字符串:{对象+结果(1)+} 3 )返回的结果(2),例如:

object.prototype.tostring.call({ }); / / {返回对象数组}
object.prototype.tostring.call( /注册/ IG); / /返回{对象regexp }

通过这种方式,我们可以编写一个函数,判断一个健壮的判断对象是否是数组。
复制代码代码如下所示:
功能ISArray(ARR){
返回object.prototype.tostring.call(ARR)={对象数组};
}

这种方法是通过一些Javascript大师出国,这将被用来检测对prototype.js者即将到来的jQuery 1.3.one阵列写了下面的函数获取对象的类型名称
复制代码代码如下所示:

*返回对象的内部{ } }属性
*
* ECMA-262,15.2.4.2
* Object.prototype.toString()
*
*当toString方法,采取以下步骤:
1。获取该对象的{ } }属性。
* 2。计算一个字符串值,将三弦{对象
* 3。返回结果(2)。
*
* __getclass(5); / / = >
* __getclass({ }); / / = >对象
* __getclass( / / / Foo);或= >正则表达式
* __getclass(' '); / / = >字符串
* __getclass(true); / / = >布尔
* __getclass({ }); / / = >阵列
* __getclass(定义); / / = >窗口
* __getclass(元); / / = >建设者
*
* /
功能__getclass(对象){
返回object.prototype.tostring.call(对象)。比赛( / ^ {对象的(*){ 1 } } $ /);
};
展开以检测各种对象类型:

var = {
类型:数组
};
对于(var i = 0,c;c =;类型{ + };;){
是{ = }(函数(类型){)
返回功能(obj){
返回object.prototype.tostring.call(obj)= {对象+类型+ };
}
(c);
}
警报(is.array({ }) / /真实);
警报(is.date(新) / /真实);
警报(is.regexp( /注册/ IG)); / /真的