js 判断一个变量是否为数组完美解决办法

前端开发中,在做项目的时候,我们经常需要对一个变量进行数组类型的判断,当然即使你暂时没遇到,但是这个问题也是大家去面试时的高频问题,有必要拿出来说一说。

大家都知道js中可以使用typeof来判断变量的基本类型,如:

 代码如下 复制代码

alert(typeof '111'); // "string"
alert(typeof 22); // "number"
alert(typeof a); // "undefined"
alert(typeof undefined); // "undefined"
alert(typeof []); // "object"

但是这个方法不适用于来判断数组,因为不管是数组还是对象,都会返回object,这就需要我们需求其他的方法。

有三种方法可以拿来判断:

1、constructor属性

这个属性在我们使用js系统或者自己创建的对象的时候,会默认的加上,例如:

var arr = [1,2,3];  //创建一个数组对象
arr.prototype.constructor = Array;  //这一句是系统默认加上的

所以我们就可以这样来判断:

var arr = [1,2,3,1];
alert(arr.constructor === Array);   // true

2、instanceof

instanceof是检测对象的原型链是否指向构造函数的prototype对象的,所以我们也可以用它来判断:

var arr = [1,2,3];
alert(arr instanceof Array);   // true

3、使用toString方法

Object.prototype.toString是原型链的顶层object的一个方法,我们可以用它来判断:

var arr = [1,2,3];
alert(Object.prototype.toString.call(arr) === '[object Array]' );   // true

4.Array.isArray()方法

ECMAScript5将Array.isArray()正式引入JavaScript,从此我们又多了一个检测

数组的方法:

 代码如下 复制代码

var arr = [1,2,3];
alert(Array.isArray(arr) );   // true

注意点:讲完了上述四种方法,下面说一下注意事项,前两种方法使用的时候不太保险,因为在跨页面操作的时候,js里面的原型链是不对应的,所以前两种方法有一定的局限性,不过一般不会遇到。第四种方法因为是新出的,脑残的IE低版本当然是不支持的,在标准浏览器下无误。由此,最好的方法还是使用第三种方法。

最后,为了给大家一个结果,现写出一个终极解决方案:

判断数组终极解决方案

 

 代码如下 复制代码
var arr = [1,2,3];
function isArrayFn(obj){  //封装一个函数
if (typeof Array.isArray === "function") {
return Array.isArray(obj); //浏览器支持则使用isArray()方法
}else{                     //否则使用toString方法
return Object.prototype.toString.call(obj) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
时间: 2024-09-05 03:15:16

js 判断一个变量是否为数组完美解决办法的相关文章

js判断一个变量是对象还是数组

typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object  代码如下 复制代码 var o = { 'name':'lee' }; var a = ['reg','blue'];   document.write( ' o typeof is ' + typeof o); document.write( ' <br />'); document.wr

js in_array判断一个值是否在数组中

例1  代码如下 复制代码 function in_array(stringToSearch, arrayToSearch) {  for (s = 0; s < arrayToSearch.length; s++) {   thisEntry = arrayToSearch[s].toString();   if (thisEntry == stringToSearch) {    return true;   }  }  return false; } 例2  代码如下 复制代码 var a

javascript中判断一个值是否在数组中并没有直接使用_基础知识

在JS中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数.但我们可以写一个类似in_array()函数来判断是一个值否在函数中 例1 复制代码 代码如下: /* * * 判断在数组中是否含有给定的一个变量值 * 参数: * needle:需要查询的值 * haystack:被查询的数组 * 在haystack中查询needle是否存在,如果找到返回true,否则返回false. * 此函数只能对字符和数字有效 * */ function findnum(){

javascript中判断一个值是否在数组

例1  代码如下 复制代码 /* * *   判断在数组中是否含有给定的一个变量值 *   参数: *   needle:需要查询的值 *   haystack:被查询的数组 *   在haystack中查询needle是否存在,如果找到返回true,否则返回false. *   此函数只能对字符和数字有效 * */   function findnum(){           var a=[1,2];//假设a是数组,obj是要判断的数         var obj=1;        

判断一个变量是数组Array类型的方法_javascript技巧

在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Array的对象就不起作用了. 复制代码 代码如下: alert(typeof null); // "object" alert

JS判断字符串变量是否含有某个字串的实现方法_javascript技巧

JS判断字符串变量是否含有某个字串的实现方法 varCts = "bblText"; if(Cts.indexOf("Text") > 0 ){ alert('Cts中包含Text字符串'); } indexOf用法: 返回 String 对象内第一次出现子字符串的字符位置. strObj.indexOf(subString[, startIndex]) 参数 strObj 必选项.String 对象或文字. subString 必选项.要在 String 对

js判断undefined变量类型使用typeof_javascript技巧

js判断undefined变量类型直接用 复制代码 代码如下: if(mydata=='undefined'){ alert("未定义"); } 这是个很低级的错误,这么使: 复制代码 代码如下: if(typeof(mydata)=='undefined'){ alert("未定义"); }

关于利用ajax使同一php文件下js的一个变量值传递给php

问题描述 关于利用ajax使同一php文件下js的一个变量值传递给php 需要引用什么js文件吗?比如我想吧一个var a=2;的值给php的$a,该怎么写程序?麻烦了- 解决方案 php与js变量传递 解决方案二: 直接用ajax把js中的变量传递给php,php接收后赋值就好了,可以用jQuery来进行ajax传值 解决方案三: jquery $.ajax({ url: 'PHP路径', data:{nums:2}, }); php $a=$_GET['nums'];

js判断一个字符串是否包含一个子串的方法_javascript技巧

本文实例讲述了js判断一个字符串是否包含一个子串的方法.分享给大家供大家参考.具体如下: 在我们前端日常开发中,经常会遇到判断一个字符串中是否包含某个子串,这里我们将去探究一些解决此种需求的方法以及正确的使用它们.理想情况下,我们要找的是一个能匹配我们的目的(if x contains y)的方法,并返回true或false. 一.String.prototype.indexOf和String.prototype.lastIndexOf 这两个方法,可能是我们最容易想到的,如果包含子串,则返回大