js判断是否为数组方法

判断是否为数组的方法:



方法一:Array.isArray([])

通过Array数组的构造函数上的isArray方法判断

image


可以看到isArray并不在数组的原型对象上 为啥捏

扩展1:为什么isArray不放在原型链上
==》解析:
因为实例能够调用原型链上的方法
比如 要判断一个变量 X 是不是一个数组
如果isArray方法在原型链上 那调用方式是 X.isArray() 这样 如果X是个数组的话没问题,但是X有可能是其他数据类型 Number或者String,这个时候X的原型并没有isArray这个方法,所以不能放在原型链上

扩展2:还有哪些方法是放在Array的构造函数上的
==》解析:
除了 Array.isArray() 还有 Array.from()、Array.of()
用法详情可参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array


方法二: Object.prototype.toString.call()

通过Object.prototype.toString.call([]) === "[object Array]" 来判断是不是数组;
同样这个方法可以用来判断是不是一个Object对象:
Object.prototype.toString.call({}) === "[object Object]"
image



方法三: instanceOf

image

instacneof 的原理是 判断构造函数的prototy属性是否出现在实例的原型链上
但是该判断方式有局限性 iframe内置数组判断的时候要小心可能会失效

方法四:arr.proto === Array.prototype

image
==》解析:
因为数组变量arr 可以通过 new Array()方式定义,可以裂解为arr是Array这个构造函数的实例,实例的__proto__ 方法和 构造函数的prototype是同一个指向 所以可以用改方法判断;
关于这块的原型链基本知识可以参考我的另一篇随笔:js原型链(点击跳转)

posted @ 2023-11-29 15:56  叶静逍  阅读(223)  评论(0)    收藏  举报