
已解决问题
谷歌GREATWALL09用户在2016.04.19提交了关于“西来古镇js语法学习之判断一个对象是否为数组”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-25T10:36:30。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
1,真正的数组的判
j**ascript中最简单的声明数组方法为:
vara=[];
判断是否为数组的
复制代码代码如下:
ains
a.const
这里涉
result=objintanceofclass
是用来判断一
复制代码代
functionRange(lo
this.low=low;
}
Range.pr
Range.prototype=
include
exclude:function(x){return(x<this.low&&x>this.hig
}
varr=newRang
rinstanceofRa
rinstanceofO
Range.prototype.constructor==Objecct;//true
这里虽然r是通
复制代码代码如下:
Range.prototype={
include:function(x){
exclude:functio
}
其实等价于:
复制代码代码如下:
Range.pr
include:function(x){return(x>=this.low&&x<=this.**);},
exclude:function(x){return(x<this.low&&x>this.**);}
});
所以Range.prototype.constructor==Object,那么通过newRange创建出来的实例当然就是Object的一个实例了。
看官方解释更直接些:
TheinstanceofoperatordoesnotactuallycheckwhetherrwasinitializedbytheRangeconstructor.ItcheckswhetheritinheritsfromRange.prototype.
j**ascript中还有一个函数typeof具有与instanceof类似的功能,但是它返回的是具体的基本**类型:**mber,string,function,object,undefined,boolean,只有这六种,不在这六种范围内的都返回object,也就是说typeof([])返回的是object,而不是array。
另一个涉及到的语法是constructor,constructor返回对象的构造函数:
复制代码代码如下:
vara=[];
a.constructor;//Array
构造函数是一个对象的初始化函数,采用new调用,如果对象是一个Array,那么其constructor应该就是Array,自己写的类就不一定了,因为可能会吧prototype中的constructor更改掉。
2,伪数组的判断方法
j**ascript中有一种伪数组,它可以使用类似于Array的遍历方法进行遍历,有length属性获取元素的长度,可以使用[]下标来获取指定的元素,这种对象我们称之为伪数组,JQuery中的对象就是典型的伪数组,如下图:
所以判断是否是伪数组的关键就是判断是否有length属性,是否存在基本的数组操作函数splice,下面就是判断方法:
复制代码代码如下:
varis_array=function(value){
returnvalue&&
typeofvalue==='object'&&
typeofvalue.length==='**mber'&&
typeofvalue.splice==='function'&&
!(value.propertyIsE**merable('length'));
};
这里propertyIsE**merable就是用来判断length属性是否可列举,其实原生的String对象也是有类似Array的效果,但是我们不能把它当作Array对象,所以这里需要判断typeofvalue=="object",因为typeof一个String对象,返回的是string。