zoukankan      html  css  js  c++  java
  • 判断对象是否为数组/函数

    打印Object的prototype属性:

    有一个toString方法,不同于一般变量的toString方法,当Object的toString方法执行时:

    1.获取当前对象的[[Class]]属性的值;

    2.返回 "[object " + 第一步得出的值+ "]"格式的字符串,例如[object Array],

     

    解析:

    [[Class]]是一种内部属性,所有的对象(原生对象和宿生对象)都拥有该属性,描述该对象的类型

    值得注意的是[[Class]]的值只能是Object, Number, String, Date等javaScript内置的数据类型,不能用于构造函数产生的对象

    于是,再借用call方法: 调用toString方法,并用另一个对象替换当前对象Object。

    console.log(Object.prototype.toString.call(11)); //[object Number]
    console.log(Object.prototype.toString.call("12")); //[object String]
    console.log(Object.prototype.toString.call(true)); //[object Boolean]
    console.log(Object.prototype.toString.call({})); //[object Object]
    console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
    console.log(Object.prototype.toString.call(new Date)); //[object Date]
    console.log(Object.prototype.toString.call(null)); //[object Null]
    console.log(Object.prototype.toString.call([1,2,3])); //[object Array]
    console.log(Object.prototype.toString.call(function(){})); //[object Function]

    这个方法是多用于判断变量是数组/函数的情况

    还有一种更简单的判断数组的方法:Array.isArray(arrayObj),当arrayObj为数组时,返回true,否则,返回false,但这种方法有兼容性问题,因此,最好的解决方法是:

    if(typeof Array.isArray === "undefined"){
        Array.isArray = function(arg){
            return Object.prototype.toString.call(arg) === "[object Array]";
        };
    }

    此方法对任何类型的变量都管用,包括null、undefined。。。

  • 相关阅读:
    IT English Collection(16) of Message
    TO DO NOW——送给奋斗着的程序“猿”们
    题目:[NOIP1999]拦截导弹(最长非递增子序列DP) O(n^2)和O(n*log(n))的两种做法
    hdu 1695 GCD
    paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt
    hive优化要点总结
    HDU 4099 Revenge of Fibonacci (数学+字典数)
    JSP小实例--计算器
    关于产品的一些思考——百度之百度百科
    正则表达式JSP实例
  • 原文地址:https://www.cnblogs.com/yanze/p/6354364.html
Copyright © 2011-2022 走看看