判断一个数组(判断数据类型)

因为typeof在判断的时候无法判断一个数据为对象还是数组,返回的值都是Object,所以罗列了以下几种方法

1.instanceof方法
instanceof运算符是⽤来测试⼀个对象是否在其原型链原型构造函数的属性
代码:

var arr = [];
arr instanceof Array; //true

注意:想要arr instanceof Array为true,得保证arr是由原始Array构造函数创建时才可行。

2.Object.prototype.toString.call()
这个方法返回一个字符串,例如:
Object.prototype.toString.call( { name: 'aaa' } ) // '[object Object]'
Object.prototype.toString.call( [1, 2, 3, 4] ) // '[object Array]'
Object.prototype.toString.call( 1 ) // '[object Number]'
Object.prototype.toString.call( '1' ) // '[object String]'
···
具体代码:

var isType = function(obj) {
	return Object.prototype.toString.call(obj).slice(8,-1);
}

3.ES5 新增⽅法isArray( )(推荐)
调用是需要加Array,因为非全局内置函数,而是数组家函数
具体代码:

var a = new Array();
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false

4.constructor
实例的构造函数属性constructor指向构造函数,那么通过contractor属性可以判断是否为一个数组。

let a = [1,2,3];
a.constructor  ===  Array;//true

5.使用方法2与方法3做更好的兼容,自己封装一个判断函数(推荐),针对于ES5之前不支持此方法的问题

function isType(arr) {
	if(!Array.isArray) {
		Array.isArray = function(arr) {
    		return Object.prototype.toString.call(arr) === '[object Array]';
    	}
    	return Array.isArray(arr);
	} else {
		return Array.isArray(arr);
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值