当前位置: 首页 > 科技观察

JavaScript判断数组的方法总结,哪个最靠谱?

时间:2023-03-15 00:38:45 科技观察

无论是工作还是面试,都会遇到判断一个数据是否为数组的需求。今天我们就来总结一下判断一个数组有多少种方法,看看哪种方法最好最靠谱。光谱。我们从三个角度来判断:构造函数、原型对象、Object的原型对象!根据构造函数判断instanceof,判断一个实例是否属于某个构造函数在实例的原型链上,另一方面,如果实例的原型链发生变化,则无法做出正确的判断。letarr=[]arr.__proto__=function(){}console.log(arrinstanceofArray)//false构造函数实例的constructor属性指向构造函数本身。letarr=[]console.log(arr.constructor===Array)//true缺点:如果修改了arr的构造函数,则无法正确判断。letarr=[]arr.constructor=function(){}console.log(arr.constructor===Array)//false根据原型对象,__proto__实例的__proto__指向原型对象oftheconstructorletarr=[]console.log(arr.__proto__===Array.prototype)//true缺点:如果修改了实例的原型链,则无法做出正确的判断。letarr=[]arr.__proto__=function(){}console.log(arr.__proto__===Array.prototype)//falseObject.getPrototypeOf()对象自己的方法,获取一个对象所属的原型对象。letarr=[]console.log(Object.getPrototypeOf(arr)===Array.prototype)//true缺点:同上Array.prototype.isPrototypeOf()数组原型对象方法,判断是否为原型一个对象对象。letarr=[]console.log(Array.prototype.isPrototypeOf(arr))//true缺点:同上,根据Object的原型对象判断Object.prototype.toString.call()。Object的原型对象上有一个toString方法,toString方法默认被所有对象继承,返回“[objecttype]”字符串。但是这个方法经常被原型链上的同名方法覆盖,需要通过Object.prototype.toString.call()强制调用。letarr=[]console.log(Object.prototype.toString.call(arr)==='[objectArray]')//true这种类型就像胎记一样,出生时刻在身上,所以修改原型chain不会对其产生任何影响。让arr=[]arr.__proto__=function(){}console.log(Object.prototype.toString.call(arr)==='[objectArray]')//trueArray.isArray()Array.isArray()是ES6中新增的方法,专门用于数组类型判断,原理同上。letarr=[]console.log(Array.isArray(arr))//true修改原型链不会对其产生任何影响。letarr=[]arr.__proto__=function(){}console.log(Array.isArray(arr))//true总结以上就是判断是否为数组的常用方法,相信不用多说了吧大家可以看到Array.isArray是最易用最靠谱的,还是ES6的香。看到就点个赞,希望今天的文章能帮到你!