如何判断javascript中的变量是不是为数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断javascript中的变量是不是为数组?相关的知识,希望对你有一定的参考价值。
如题,如何判断javascript中的变量是否为数组?在网上找了很多方法,感觉都不是很适合。谁有个比较有效的方式判断变量是否为数组。
通过下面方法进行检测,如果是数组,则返回true,如果不是数组,则返回false
function isArray(obj)return Object.prototype.toString.call(obj) === '[object Array]';
测试:
var a1 = [1,2,3];var a2=new Array("a","b");
var a3=a:1;
alert(isArray(a1));//true
alert(isArray(a2));//true
alert(isArray(a3));//false
补充:
根据ECMA-262规范定义
1、Object.prototype.toString( ) When the toString method is called, the following steps are taken:
Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)
2、new Array([ item0[, item1 [,…]]])
The [[Class]] property of the newly constructed object is set to “Array”.
因此检测对象是否是[object Array]就能判断是否是数组,call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。
参考技术A 数组为引用类型,用 typeof 操作符检测引用类型的作用不大。ECMAScript提供了instanceof 操作符用于检测引用类型。如:<script>
var arr = [ ];
alert (arr instanceof Array )//如果变量是给定引用类型,那么instanceof 操作符返回true,这里返回true
</script> 参考技术B a instanceof Array //判断a是数组吗
a是数组的话返回true,否则返回false 参考技术C Array.prototype.isPrototypeOf([1,2,3]) 参考技术D var array = [];
alert(Object.prototype.toString.call(array) == '[object Array]')本回答被提问者采纳
判断一个变量是不是为数组
参考技术A 怎么判断一个变量是不是数组呢?由于数组也是对象,用typeof方法,输出的是Object,所以typeof肯定不能判断一个变量是否为数组了,今天主要记录其他集中判断变量是不是数组的方法。所以arr instanceof Array 返回true即可判断arr是数组。
如果返回true就是数组。
instanceof 和constructor判断的变量,必须在当前页面声明的,比如,一个页面中有一个子页面,子页面中声明了一个arr并将其赋值给父页面,在父页面应用23方法都是不可以的。
原因:
1、array属于引用类型,在数据传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面中声明的arr,所对应的构造函数是子页面的Array对象,父页面来判断并不等于子页面的Array
这个返回true的话就是数组啦~
以上是关于如何判断javascript中的变量是不是为数组?的主要内容,如果未能解决你的问题,请参考以下文章