js如何判断数组是Array类型


js一共有六大数据类型:number、string、object、boolean、null、undefined

var str="string";
console.log(typeof str); //string

var num=1;
console.log(typeof num); //number

var bn=false;
console.log(typeof bn); //boolean

var a;
console.log(typeof a); //undfined

var obj = null;
console.log(typeof obj); //object

var doc = document;
console.log(typeof doc);//object

var arr = [];
console.log(arr); //object

var fn = function(){};
console.log(typeof fn); //function 
除了前四个类型外,null、对象、数组返回的都是object类型;
对于函数类型返回的则是function,再比如typeof(Date),typeof(eval)等。

接下来进入正题,js判断数组类型的方法。

方法一: 使用instanceof方法

instanceof 用于判断一个变量是否某个对象的实例,左边操作数是一个对象,右边操作数是一个函数对象或者函数构造器。

原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。
a instanceof b?alert("true"):alert("false")  //注意b值是你想要判断的那种数据类型,不是一个字符串,比如Array。
举一个例子:
var arr=[];
console.log(arr instanceof Array) //返回true

 

方法二: 使用constructor方法

在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的。
那么判断各种类型的方法:
console.log([].constructor == Array);  //true

console.log({}.constructor == Object);  //true

console.log("string".constructor == String); //true

console.log((123).constructor == Number);  //true

console.log(true.constructor == Boolean);  //true
注意:
使用instaceof和construcor,被判断的array必须是在当前页面声明的!

比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false

原因:

1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递
2、每个页面的Array原生对象所引用的地址是不一样的在子页面声明的array,所对应的构造函数,是子页面的Array对象父页面来进行判断,使用的Array并不等于子页面的Array
方法三: 使用 Object.prototype.toString.call(arr) === '[object Array]'方法
function isArray(o) {
  return Object.prototype.toString.call(o);
}

var arr=[2,5,6,8];

var obj={name:'zhangsan',age:25};

var fn = function () {}

console.log(isArray(arr)); //[object Array]

console.log(isArray(obj)); //[object Object]

console.log(isArray(fn));  //[object function]

 

方法四:ES5定义了Array.isArray:
Array.isArray([]) //true

 






免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM