字符串和函数有 length 属性,但是它们可以用 typeof 检测将其排除。在客户端Js中,DOM文本节点也有 length 属性,需要额外判断 obj .nodeType != 3 将其排除( nodeType 属性返回以数字值返回指定节点的节点类型。如果节点是元素节点,则 nodeType 属性将返回 1。如果节点是属性节点,则 nodeType 属性将返回 2 ):
// 判定obj是否是一个类数组对象function isArrayLike( obj ) { if( obj && typeof obj === "object" && // obj非null、undefined等 obj是对象 isFinite(obj.length) && // obj.length是有限数值 obj.length >= 0 && // obj.length为非负数 obj.length === Math.floor(obj.length) && // obj.length是整数 obj.length < 4294967296) // obj.length < 2^32 return true; else return false;}