美文网首页
判断一个变量是否为数组

判断一个变量是否为数组

作者: 飞飞廉 | 来源:发表于2018-03-11 16:26 被阅读0次

怎么判断一个变量是不是数组呢?由于数组也是对象,用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的话就是数组啦~

相关文章

网友评论

      本文标题:判断一个变量是否为数组

      本文链接:https://www.haomeiwen.com/subject/mbrwfftx.html