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