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。。。

  • 相关阅读:
    使用element-ui的table组件时,渲染为html格式
    vue-quill-editor富文本编辑器,添加了汉化样式却汉化不了
    MySQL版本问题导致的SQLException
    MySQL中 ORDER BY 与 LIMIT 的执行顺序
    MySQL 测试数据批量导入
    CentOS 7 安装 Maven
    CentOS 7 安装 Gradle
    CentOS 7 安装 RabbitMQ
    CentOS 7 安装 Tomcat 8.5.43
    CentOS 7 配置网络
  • 原文地址:https://www.cnblogs.com/yanze/p/6354364.html
Copyright © 2011-2022 走看看