JS判断Array、Object或null

typeof 返回值有六种可能: “number,” “string,” “boolean,” “object,” “function,” 和 “undefined.”以及’symbol’

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 

在多个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';
	}
};

猜你喜欢

发表评论

最新发布