zoukankan      html  css  js  c++  java
  • Object.prototype.toString.call() 区分对象类型

    判断一个对象的类型:

    /**
    * 判断对象是否为数组
    * @param  {Object} source 待判断的对象
    * @return {Boolean}        true|false
    */
    Object.isArray = function (source) {
        return '[object Array]' == Object.prototype.toString.call(source);
    };

    测试:

    Object.isArray = function (source) {
            return '[object Array]' == Object.prototype.toString.call(source);
        };
    
        window.onload=function() {
            var testData=['','a','b','c'];
            Object.isArray(testData);
        }

    在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

    要想区别对象、数组、函数单纯使用 typeof 是不行的。或者你会想到 instanceof 方法,例如下面这样:

    var a = {};
    var b = [];
    var c = function () {};
    
    //a b c 都是 Object 的实例
    console.log(a instanceof Object) //true
    console.log(b instanceof Object) //true
    console.log(c instanceof Object) //true
    
    //只有 Array 类型的 b 才是 Array 的实例
    console.log(a instanceof Array) //false
    console.log(b instanceof Array) //true
    console.log(c instanceof Array) //false
    
    //只有 Function 类型的 c 才是 Function 的实例
    console.log(a instanceof Function) //false
    console.log(b instanceof Function) //false
    console.log(c instanceof Function) //true
    

    从以上代码来看,要判断复合数据类型,可以如下判断:

    //对象
    (a instanceof Object) && !(a instanceof Function) && !(a instanceof Function)
    //数组
    (a instanceof Object) && (a instanceof Array)
    //函数
    (a instanceof Object) && (a instanceof Function)
    

    更简便的方式,即是使用 Object.prototype.toString.call() 来确定类型

    由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:

    console.log(Object.prototype.toString.call(123)) //[object Number]
    console.log(Object.prototype.toString.call('123')) //[object String]
    console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
    console.log(Object.prototype.toString.call(true)) //[object Boolean]
    console.log(Object.prototype.toString.call({})) //[object Object]
    console.log(Object.prototype.toString.call([])) //[object Array]
    console.log(Object.prototype.toString.call(function(){})) //[object Function]
    

    所有类型都会得到不同的字符串,几乎完美。

  • 相关阅读:
    对soc-audio体系snd_soc_machine和snd_soc_dai_link简单理解
    I2S
    alsa和oss声音系统比较
    break 和 continue
    phalcon查询:单条查询,多条查询,多表查询
    phalcon: 独立的映射,字段名名别名
    phpexcel: 数据导出
    php:Mcrypt响应慢的原因解决备注
    js:s上次预览,上传图片预览,图片上传预览
    yii2: 点击编辑后,左侧的连接(a.navtab)失效,变成在新窗口打开
  • 原文地址:https://www.cnblogs.com/laneyfu/p/4363076.html
Copyright © 2011-2022 走看看