Javascript判断object还是list/array的类型(包含javascript的数据类型研究


Javascript判断object还是list/array的类型(包含javascript的数据类型研究)_数据类型


前提:先研究javascript中的变量有几种,参考:

JavaScript 数据类型

http://glzaction.iteye.com/blog/1285147

测试1:

typeof关键字
var obj= {test:'test'};
typeof obj;//输出object
var list = [{test:'test'}];
typeof list;//输出object
var str = 'str';
typeof str;//输出string
var i = 1;
typeof i;//输出number
var b = false;
typeof b;//输出boolean
var n = null;
typeof n;//输出object
n==null;//输出true
var n;
typeof n;//输出undefined

直接输出一个没有定义的变量

typeof a;//输出undefined
function func(){}
typeof func;//输出function

以上可以发现,只能判断list和obj同时输出了object

在判断某个对象是否为指定类型时,可以用==或者===,比如:typeof func === 'function'或者typeof func == 'function'

测试2:

Object.prototype.toString.call( obj )
var obj= {test:'test'};
Object.prototype.toString.call( obj );//输出[object Object]
var list = [{test:'test'}];
Object.prototype.toString.call( list );//输出[object Array]
var str = 'str';
Object.prototype.toString.call( str );//输出[object String]
var i = 1;
Object.prototype.toString.call( i );//输出[object Number]
var b = false;
Object.prototype.toString.call( b );//输出[object Boolean]
var n = null;
Object.prototype.toString.call( n );//输出[object Null]
n==null;//输出true
var n;
Object.prototype.toString.call( n );//输出[object Undefined]

直接输出一个没有定义的变量

Object.prototype.toString.call( a );//输出:Uncaught ReferenceError: n1 is not defined,会报异常,阻止执行下面
function func(){}
Object.prototype.toString.call( function );//输出[object Function]

这个方法可以很明确的直到obj和list的类型

判断时使用Object.prototype.toString.call( list )==='[object Array]'或者Object.prototype.toString.call( list )=='[object Array]',==或者===一样的效果。

测试3:

如果使用jquery,可以使用$.isArray(obj)的方法,如下:


var a = ["A", "AA", "AAA"];if($.isArray(a)) {
  console.log("a is an array!");
} else {
  console.log("a is not an array!");
}


但是测试发现,只能判断数组,没有判断对象的方法。

测试4:

instanceof 关键字

var obj= {test:'test'};
var str = 'str';
var i = 1;
 var b = false;var list = [{test:'test'}];
var n = null;
function func(){}

通过测试,使用如:obj instanceof Object的形式,只能是判断两种类型Object和Array,其中Boolean、Number、String可以判断,但是会返回false,如上面i和b变量;如果判断为null或者undefind会报Uncaught TypeError: Right-hand side of 'instanceof' is not an object这样的错误。

测试5:

直接通过Array.isArray(obj),javascript的原生方法,不过这个只能判断数组。

测试5:

通过obj.constructor关键字

var obj= {test:'test'};
var str = 'str';
var i = 1;
 var b = false;var list = [{test:'test'}];
var n = null;
function func(){}

通过测试,使用如:str == String.constructor的形式,只能判断Object、Array、String、Boolean、Number,对于null、function、undefind这些会报异常。

参考:

javascript - How can I check if an object is an array? - Stack Overflow

http://www.jb51.net/article/21945.htm