转载: https://blog.csdn.net/u013362969/article/details/81141945
typeof 返回值有六种可能: "number," "string," "boolean," "object," "function" ,"undefined."以及'symbol' 。
-
// Symbols
-
typeof Symbol() === 'symbol'
-
typeof Symbol('foo') === 'symbol'
-
typeof Symbol.iterator === 'symbol'
null,array,object返回的都是‘object’
1.instanceof
var arr = [1,2,3,1];
alert(arr instanceof Array); // true
2、constructor
var arr = [1,2,3,1]; alert(arr.constructor === Array); // true
第1种和第2种方法貌似无懈可击,但是实际上还是有些漏洞的,当你在多个frame中来回穿梭的时候,这两种方法就亚历山大了。由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的,因此导致上述检测代码失效
3、Object.prototype.toString
function isArrayFn (o) { return Object.prototype.toString.call(o) === '[object Array]'; } var arr = [1,2,3,1]; alert(isArrayFn(arr));// true
4、Array.isArray() 【ie8 不支持】
5、综合
var arr = [1,2,3,1]; var arr2 = [{ abac : 1, abc : 2 }]; function isArrayFn(value){ if (typeof Array.isArray === "function") { return Array.isArray(value); }else{ return Object.prototype.toString.call(value) === "[object Array]"; } } alert(isArrayFn(arr));// true alert(isArrayFn(arr2));// true
-----------------------------
二、判断是Array还是Object或者null
利用typeof
-
var getDataType = function(o){
-
if(o===null){
-
return 'null';
-
}
-
else if(typeof o == 'object'){
-
if( typeof o.length == 'number' ){
-
return 'Array';
-
}else{
-
return 'Object';
-
}
-
}else{
-
return 'param is no object type';
-
}
-
};
或者用instanceof
-
var getDataType = function(o){
-
if(o===null){
-
return 'null';
-
}
-
if(o instanceof Array){
-
return 'Array'
-
}else if( o instanceof Object ){
-
return 'Object';
-
}else{
-
return 'param is no object type';
-
}
-
};