js判断是否为数组方法
判断是否为数组的方法:
方法一:Array.isArray([])
通过Array数组的构造函数上的isArray方法判断

可以看到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]"

方法三: instanceOf

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

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

浙公网安备 33010602011771号