数组在JavaScript中是一个很重要的数据类型,会经常用到,那要怎么判断是否为一个数组对象呢,直接typeof是不行的,那有什么其他方法呢,其实不少不止一种的。
instanceof或constructor
var arr=[1,2,3];
typeof arr; // object
arr instanceof Array; //true
arr instanceof Object; //true
arr.constructor == Array; // true
这两种方法都用了JavaScript中面向对象的特点,检测对象的原型链是否指向构造函数的prototype对象的。这两种方法有些情况是有漏洞的,当你在多个frame中来回穿梭的时候,这两种方法就亚历山大了。由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的,因此导致上述检测代码失效。
Object.prototype.toString.call()
var arr=[1,2,3];
Object.prototype.toString.call(arr) === "[object Array]";
// true
var date = new Date();
Object.prototype.toString.call(date);
//"[object Date]"
Object.prototype.toString.call(null);
//"[object Null]"
Object.prototype.toString.call(undefined);
//"[object Undefined]"
这种方法还是很好用的,能识别Date,Array,null,undefined各种类型,但是要注意大小写。
isArray()
var arr = [1,2,3];
Array.isArray(arr);//true
ECMAScript5已将Array.isArray()正式引入JavaScript,目的就是准确地检测一个值是否为数组。大多浏览器都实现了这个方法,但是在IE8之前的版本是不支持的。