如何判断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中的变量是不是为数组?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 如何判断某变量等于某数组中的一个元素

JavaScript--判断某个变量是不是数组

JS 判断某变量是不是等于某数组中的一个值 的几种方法

请问js怎么判断一个变量是对象还是数组呢?

判断一个变量是不是为数组

Javascript中判断变量是数组还是对象(array还是object)