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';
}
};