js里判断变量是数组还是对象的四种方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js里判断变量是数组还是对象的四种方法相关的知识,希望对你有一定的参考价值。
因为无论是数组还是对象,对于typeof的操作返回值都为object,所以就有了区分数组类型和对象类型的需要:方一:通过length属性:一般情况下对象没有length属性值,其值为undefiend,而数组的length值为number类型
缺点:非常不实用,当对象的属性存在length,且其值为number(比如类数组),则该方法失效,不建议使用,看看即可。
*方二:通过instanceof来判断区分
var arr = [1, 2, 3]; var obj = name: 'lyl',age: 18, 1: 'name'console.log(arr instanceof Array); //trueconsole.log(obj instanceof Array); //false
*方三:通过constructor
var arr = [1, 2, 3]; var obj = name: 'lyl',age: 18, 1: 'name'console.log(arr.constructor === Array); //trueconsole.log(obj.constructor === Array); //false 参考技术A Array.isArray(变量)
判断一个变量是不是为数组
参考技术A 怎么判断一个变量是不是数组呢?由于数组也是对象,用typeof方法,输出的是Object,所以typeof肯定不能判断一个变量是否为数组了,今天主要记录其他集中判断变量是不是数组的方法。所以arr instanceof Array 返回true即可判断arr是数组。
如果返回true就是数组。
instanceof 和constructor判断的变量,必须在当前页面声明的,比如,一个页面中有一个子页面,子页面中声明了一个arr并将其赋值给父页面,在父页面应用23方法都是不可以的。
原因:
1、array属于引用类型,在数据传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面中声明的arr,所对应的构造函数是子页面的Array对象,父页面来判断并不等于子页面的Array
这个返回true的话就是数组啦~
以上是关于js里判断变量是数组还是对象的四种方法的主要内容,如果未能解决你的问题,请参考以下文章