在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,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属性。
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

最新文章

  1. 实验三——SDRAM
  2. Visual Assist X 10.6.1837完美破解版(带VS2010破解)
  3. WCF实例上下文
  4. C# - 系统类 - Type类
  5. SQL Server索引进阶:第八级,唯一索引
  6. APK重新签名方法
  7. 测试网页时需要添加等待的情形 (Selenium)
  8. 【原创】大数据基础之Oozie(1)简介、源代码解析
  9. .net 语音,视频等格式转换
  10. Java线程小刀牛试
  11. SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用?
  12. C#反射の反射接口
  13. mvc中使用Pagination,对其进行再封装
  14. Wampserver虚拟机配置记录
  15. BugPhobia进阶篇章:功能规格说明书
  16. 由于找不到 MSVCR100.dll,无法继续执行代码
  17. 【matlab】笔记_1
  18. java⑿
  19. 20155338 2016-2017-2 《Java程序设计》第6周学习总结
  20. Python: 合并多个字典

热门文章

  1. Java-Maven:Maven百科
  2. bzoj 1061: [Noi2008]志愿者招募【最小费用最大流】
  3. [App Store Connect帮助]八、维护您的 App(6)使某个先前版本不可下载
  4. 【技巧】解决win10的1803版本下,无法收到1809推送、从而无法更新到1903版本的问题。
  5. layer 确认或取消后跳转
  6. jenkins软件工具部署
  7. (二)python高级特性
  8. DFS Codeforces Round #306 (Div. 2) B. Preparing Olympiad
  9. Xcode配置SVN详细步骤
  10. 专 linux命令之set x详解