JS判断数组那点事
面试题中有个这样题目如何判断数组大家都知道哪些方法
其实有时候明明知道哪些方法但在关键时候就是说不上来
typeof运算符
typeof会返回这个类型的字符串
vara='123' console.log(typeof(a))//string varb=[] console.log(typeof(b))//object varc={} console.log(typeof(c))//object vard=null console.log(typeof(d))//object
上述看到数组对象null用typeof返回都是object这种方法不能识别出是否为数组
原型contructor链方法
实例化有一个contructor属性这个属性指向生成对象数组的方法
vara=[] console.log(a.__proto__.constructor)//ƒArray(){[nativecode]} varb={} console.log(b.__proto__.constructor)//ƒObject(){[nativecode]}
上述看到数组是由Array函数实例化的对象由Object函数实例化来得
感觉这种方法是可以了但是constructor这个属性是可以被改写的
vara=[] a.__proto__.constructor=Object console.log(a.__proto__.constructor)//ƒObject(){[nativecode]}
可以看到这个是变成了数组判断成了对象所以这个方法也不是最好的
instanceof
这个方法是判断某个构造函数的prototype属性所指向的对象是否在另外一个要检测对象的原型链上
vara=[] console.log(ainstanceofArray)//a对象的原型链上能找到Arraytrue console.log(ainstanceofObject)//true原型链上也能找到对象
上述这种也不是特别好判断不出是数组还是对象
通用的方法toString
toString()方法返回放映这个对象的字符串
vara='123' console.log(a.toString())//123 varb=[1,2,3] console.log(b.toSting())//1,2,3 varc={} console.log(c.toString))//[objectObject]
可以看到只有对象返回对象类型
返回[objecttype]type代表对象的类型
判断对象用Object的toString的方法拿过来用
vara=[] Object.prototype.toString.call(a)//[objectArray]
这个对象toString方法是可以判断出是否为数组
但是这里注意下有个情况就是对象原型上toString()也是可以更改的
Array.isArray(XX)
个人感觉还是使用通用方法toString()方法靠谱
总结
以上所述是小编给大家介绍的JS判断数组那点事,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!