typeof都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object
var o = {name: '琼台博客'};
var a = ['reg', 'blue'];
console.log( ' o typeof is ' + typeof o);
console.log( ' a typeof is ' + typeof a);
Output
o typeof is object
a typeof is object
因此,我们只能放弃这种方法,要判断是数组或者对象有两种方法
第一,使用typeof加length属性
数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断
var o = {name: '琼台博客'};
var a = ['reg', 'blue'];
var getDataType = function (o) {
if (typeof o == 'object' && o) {
if(typeof o.length === 'number'){
return 'Array';
}else{
return 'Object';
}
} else {
return 'param is not object type';
}
};
console.log(getDataType(o)); // Output: Object
console.log(getDataType(a)); // Output: Array
console.log(getDataType(1)); // Output: param is not object type
console.log(getDataType(true)); // Output: param is not object type
console.log(getDataType('a')); // Output: param is not object type
console.log(getDataType(null)); // Output: param is not object type
第二,使用instanceof
instanceof可以判断一个变量是不是数组,如
var o = {name: '琼台博客'};
var a = ['reg', 'blue'];
console.log(a instanceof Array); // Output: true
console.log(o instanceof Array); // Output: false
也可以判断是不是属于Object
var o = {'name': '琼台博客'};
var a = ['reg', 'blue'];
console.log(a instanceof Object); // true
console.log(o instanceof Object); // true
但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object
var o = {name: '琼台博客'};
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 not object type';
}
};
console.log(getDataType(o)); // Output: Object
console.log(getDataType(a)); // Output: Array
console.log(getDataType(1)); // Output: param is not object type
console.log(getDataType(true)); // Output: param is not object type
console.log(getDataType('a')); // Output: param is not object type
使用Array.isArray
这个需要高级版本浏览器才能支持,具体可以到浏览器官网查查这个特性在哪个浏览器才能使用
console.log(Array.isArray()); // Output: false
console.log(Array.isArray({})); // Output: false
console.log(Array.isArray(1)); // Output: false
console.log(Array.isArray('')); // Output: false
console.log(Array.isArray([])); // Output: true