[JavaScript基础]类型检测(ES5)
2019-03-07 本文已影响5人
向布谷鸟说早安
// 数据类型(6种)
number,boolean,string,null,undefined,object
1.typeof非引用类型的判断(7种)
string,object,number,boolean,function,undefined,typeerror
// typeof a;(typeerror)
// let a;
-
instanceof引用类型的判断
缺点:
2.1 不能区分跨frame的Array类型
2.2 不能检测某个对象是原生类型还是某个库定义的类型 -
Object.prototype.toString.call()
3.1 可以跨frame
3.2 可以区分原生对象和非原生对象 -
constructor引用类型的判断
应用:
判断类型:
let class2type = {};
'Boolean Number String Function Array Date RegExp Object Error'.split(' ')
.map((item, index) => {
class2type['[object ' + item + ']'] = item.toLowerCase();
});
function type(obj) {
if(obj == null) {
return obj + '';
}
return typeof obj === 'object' || typeof obj === 'function'?
class2type[Object.prototype.toString.call(obj)] || 'object' : typeof obj;
}
判断某个对象是否是window:
function isWindow(obj)
{ return obj != null && obj === obj.window }
判断某个对象是否是普通对象:
function isPlainObject(obj) {
return obj && obj.window !== obj &&
Object.getPrototypeOf(obj) === Object.prototype;
}
判断某个对象是否是空对象:
function isEmpty(obj) {
let name;
for(name in obj) {
return false
}
return true;
}
判断某个对象是否是类数组:
判断某个对象是否是数组:
function isArray(obj) {
return type(obj) === 'array';
}