Typeof returns object
In JavaScript all data types are strictly objects, but in practice we still have types, and if you want to determine whether a variable is an array or an object you can’t use typeof because it all returns objects
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);
Perform:
o typeof is object
a typeof is object
Therefore, we can only abandon this method, to determine the array or object there are two ways
First, use the typeof plus the length property
The array has a length property, object does not, and both the typeof array and the object return object, so we can say that
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
Second, use instanceof
Instanceof can be used to determine whether a variable is an array, such as:
var o = { 'name':'lee' };
var a = ['reg','blue'];
alert( a instanceof Array ); // true
alert( o instanceof Array ); // false
You can also determine whether it belongs to object
var o = { 'name':'lee' };
var a = ['reg','blue'];
alert( a instanceof Object ); // true
alert( o instanceof Object ); // true
However, arrays are also objects, so both of the above are true. Therefore, when we use instanceof to determine whether the data type is an object or an array, we should judge the array first and the object last
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
If you don’t prioritize Array, for example:
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
Then the array will also be judged as object.