1、实数组的判断方法javascript中声明数组最简单的方法是:var a=[];判断是否是数组最直接的方法是:复制代码如下: a instanceof array//true a . constructor==array//true这里涉及到一个instance of语法,是一个cloud运算符,就像'-*/'一样。其语法如下:result=obj intanceof class用于判断一个对象是否是一个类的实例,运算结果返回true或false。在javascript中,类的定义是由构造函数初始化的,所以语法instanceof的右运算符类必须是Function的Instance,也就是说,Function的类Instance必须为true,如果使用instanceof时右运算符不是函数,则会引发TypeError异常。所有对象都是对象的实例,因此对象的任何对象实例都返回真。虽然我们说对象是由构造函数初始化的,但是instanceof是由构造函数的原型继承的,而不是通过检查对象是否是由这个函数构造的。下面的例子可以说明这个问题:复制代码如下:函数范围(低,高){this。低=低;this.high=high} Range . prototype . constructor==Range;//true Range . prototype={ include : function(x){ return(x=this . low x=this . high);},exclude:函数(x){ return(x this . low x this . high);} } var r=新范围(0,100);范围的实例;//对象的假实例;//true range . prototype . constructor==Objecct;//这里的true,虽然r是由新的Range构造的,但是r不是Range的实例,这就是问题所在。Range.prototype赋值语句包含默认构造函数。在分配原型之前,Range.prototype.constructor是Range,分配之后,它就变成了Object。这很容易理解,因为复制代码如下: range . prototype={ include : function(x){ return(x=this . low x=this . high);},exclude:函数(x){ return(x this . low x this . high);}}实际上相当于:复制代码如下:range。prototype=new object({ include : function(x){ return(x=this。lowx=这个。高);},exclude:函数(x){ return(x this . low x this . high);} });因此,range . prototype . constructor==Object,那么由新的Range创建的实例当然是对象的实例。更直接地看官方解释:运算符的实例实际上并不检查r何时被范围构造函数初始化。它检查何时从rang继承。在e.prototype. javascript中还有一个函数typeof,它的函数与instanceof类似,但它返回特定的基本数据类型:数字、字符串、函数、对象、undefined、boolean,只有这六种类型,这六种类型之外的类型返回object,这意味着typeof([])返回object而不是array。涉及到的另一个语法是constructor,返回对象的构造函数:复制代码如下: var a=[];a .构造函数;Array构造函数是对象的初始化函数,由new调用。如果对象是array,那么它的构造函数应该是Array,自己编写的类就没有必要了,因为prototype中的构造函数可能会发生变化。2.伪数组的判断方法javascript中有一个伪数组,可以用类似Array的遍历方法遍历。长度属性可以用来获取元素的长度,下标[]可以用来获取指定的元素。这种对象叫做伪数组,JQuery中的对象就是典型的伪数组,如下所示:。
所以判断是否是伪数组的关键是判断是否有长度属性,是否有基本的数组运算函数拼接。下面是判断方法:复制代码如下: varis _ array=function(value){返回值类型value==' object '类型value.length==' number '类型value.splice===' function '!(value . propertyisenumerable(' length ');};这里,propertyIsEnumerable用于判断长度属性是否可以枚举。其实原生字符串对象也有类似Array的效果,但是我们不能把它当作Array对象,所以这里需要判断typeof value=='object ',因为typeof一个string对象返回String。