JS中对象类型的检测

检测一个对象是否存在:

if (typeof myObj === 'undefined') {
    var myObj = {};
}

可用于检测对象类型的运算符:

  • typeof
    主要对基础数据类型的判断,对引用类型都会返回object
  • instanceof
    左边的运算符必须是一个对象,右边的晕算数是对象类的名字或者构造函数
  • 对象的constructor属性
    每个对象都有constructor属性,起引用了该对象的构造函数
function isArray (arr) {
    return arr instanceof Array;
}

也可以通过

function isArray (arr) {
    return typeof arr === 'object' && arr.constructor === Array;
}

但是instanceof在某些IE版本中无效,且同一个页面中的不同框架(ifame)不共享prototype,所以最佳实践是:

if (typeof Array.isArray === 'undefined') {
     Array.isArray = function (arr) {
        return Object.prototpe.toString.call(arr) === '[object Array]'
    } 
}

一个用于获取对象类型名的通用函数:

function __getClass (object) {
    return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]&/)[1];
}

通过拓展,可以编写一个检测的函数:

function is (type, object) {
    return type === __getClass(object);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容