判断数组Array的方法

数组在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之前的版本是不支持的。

你可能感兴趣的:(判断数组Array的方法)