JavaScript判断一个变量是对象还是数组

JavaScript 2013-06-08 数组,对象,instanceof,typeof

typeof都返回object

在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object

var o = { 'name':'lee' };
var a = ['reg','blue'];

document.write( ' o typeof is ' + typeof o);
document.write( ' <br />');
document.write( ' a typeof is ' + typeof a);

执行:

o typeof is object
a typeof is object   

因此,我们只能放弃这种方法,要判断是数组or对象有两种方法

第一,使用typeof加length属性

数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断

var o = { 'name':'lee' };
var a = ['reg','blue'];

var getDataType = function(o){
	if(typeof o == 'object'){
		if( typeof o.length == 'number' ){
			return 'Array';	
		}else{
			return 'Object';	
		}
	}else{
		return 'param is no object type';
	}
};

alert( getDataType(o) );	// Object
alert( getDataType(a) );	// Array
alert( getDataType(1) );	// param is no object type
alert( getDataType(true) );	// param is no object type
alert( getDataType('a') );	// param is no object type

第二,使用instanceof

使用instanceof可以判断一个变量是不是数组,如:

var o = { 'name':'lee' };
var a = ['reg','blue'];

alert( a instanceof Array );  // true
alert( o instanceof Array );  // false

也可以判断是不是属于object

var o = { 'name':'lee' };
var a = ['reg','blue'];

alert( a instanceof Object );  // true
alert( o instanceof Object );  // true

但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object

var o = { 'name':'lee' };
var a = ['reg','blue'];

var getDataType = function(o){
	if(o instanceof Array){
		return 'Array'
	}else if( o instanceof Object ){
		return 'Object';
	}else{
		return 'param is no object type';
	}
};

alert( getDataType(o) );	// Object
alert( getDataType(a) );	// Array
alert( getDataType(1) );	// param is no object type
alert( getDataType(true) );	// param is no object type
alert( getDataType('a') );	// param is no object type

如果你不优先判断Array,比如:

var o = { 'name':'lee' };
var a = ['reg','blue'];

var getDataType = function(o){
	if(o instanceof Object){
		return 'Object'
	}else if( o instanceof Array ){
		return 'Array';
	}else{
		return 'param is no object type';
	}
};

alert( getDataType(o) );	// Object
alert( getDataType(a) );	// Object
alert( getDataType(1) );	// param is no object type
alert( getDataType(true) );	// param is no object type
alert( getDataType('a') );	// param is no object type

那么数组也会被判断为object。

文字链接:《JavaScript判断一个变量是对象还是数组

文章地址:http://www.qttc.net/201306338.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 3

  • 第一种方法有不严谨的地方,假如有一个对象var anObject = {a:1, length:2}; getDataType(anObject);会返回Array.但这明显和我们的预期不符。推荐使用Object.prototype.toString.call()方法
    2017-12-22 15:14:59 [ 跟帖 ]
    1 #
  • 你的博客非常不错 我的博客 http://www.javaxxz.com 欢迎交流。
    2015-08-28 21:27:16 [ 跟帖 ]
    2 #
  • 太不给力了,咋这么多天没写文章
    2013-06-13 14:11:57 [ 跟帖 ]
    3 #