判断一个变量是否为数组

怎么判断一个变量是不是数组呢?由于数组也是对象,用typeof方法,输出的是Object,所以typeof肯定不能判断一个变量是否为数组了,今天主要记录其他集中判断变量是不是数组的方法。

  • 1、typeof arr.pop
    如果arr是数组的话,返回的是function,因为数组arr是由Array构造函数构造来的,因此数组arr的原型链上能找到pop/push函数,如果是的话就是数组。
    当然这种方式也由缺点,如果这个变量自定义了pop/push函数的话,这句话也返回function,所以这个方法还是由缺陷的。
  • 2、 instanceof
    L instanceof R,熟悉原型链的同学应该知道instanceof的原理,即在L的原型链上寻找,如果找到一个对象正好等于R的原型,即返回true,代表着,L是由R构造出来的。
L.__proto__.__proto__...=R.prototype

所以arr instanceof Array 返回true即可判断arr是数组。

  • 3、原型链方法
    这种方法其实和第二种方法类似。
arr.__proto__.constructor==Array

如果返回true就是数组。

23方法的局限性:

instanceof 和constructor判断的变量,必须在当前页面声明的,比如,一个页面中有一个子页面,子页面中声明了一个arr并将其赋值给父页面,在父页面应用23方法都是不可以的。
原因:
1、array属于引用类型,在数据传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面中声明的arr,所对应的构造函数是子页面的Array对象,父页面来判断并不等于子页面的Array

  • 4、通用的方法
Object.prototype.toString.call(arr)=='[object Array]'

这个返回true的话就是数组啦~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容