• isArray方法浅析


    今天看到群里有人在讨论Array的isArray方法,学习的同时自己又查了查网上的资料,记录如下:

    首先是这个方法的实现原理

    Array.isArray = function(value) {
      return Object.prototype.toString.call(value) === '[object Array]';
    }

    简单理解就是运用对象原型的toString方法将Array转换为字符串,之后进行比对,下面我们来详细分析下各个部分的组成。
    Object.prototype.toString代表这个toString方法本来是对象原型上面的,之后call方法将toString方法中的this转换为参数value,这样传进的参数value(实际上对于此方法应该是个数组[])就可以通过原型的方法来转换为字符串,这样说可能不容易理解,我们接着看下面的call方法解析。

    文档中描述:调用一个对象的一个方法,以另一个对象替换当前对象。
    Call([thisObj[,arg1[, arg2[, [,.argN]]]]])

    thisObj
    可选项。将被用作当前对象的对象。

    arg1, arg2, , argN
    可选项。将被传递方法参数序列。

    看下面的例子:

    function a(){  
        this.showName = function(){  
            document.write(this.name);  
        }  
    }  
      
    function Person(arg){  
        this.name = arg;    
    };  
      
    var a = new a();  
    var alex = new Person("alex")  
        
    a.showName.call(alex); 

    在这段代码中, 函数a中有名为showName的方法,需要有this.name 参数,此时用call方法,传入实例alex.name, 用新对象alex替代this指针。

    那么[object Array]是什么呢,它是toString方法返回值中的一种,我们先看下面的例子:

    var a={a:1,b:"str"};
    console.log(a.toString());

    输出的结果是[object Object],a对象的{}相当于new Object(), 定义了一个对象的实例,而toString方法默认返回[object objectname],因此,小写的object是方法返回的值格式中默认的,大写的Object是对象的名字。
    上面的[object Array]也是同样的道理,只是a对象此时是数组对象。

    这样通过返回Object.prototype.toString.call(value) === '[object Array]'的判断结果就可以实现参数value是否为数组了。

  • 相关阅读:
    第一次sprint团队贡献分改
    第一个Sprint冲刺事后诸葛报告
    第一个Sprint冲刺第十天
    第一个Sprint冲刺第九天
    第一个Sprint冲刺第八天
    第一个Sprint冲刺第七天
    第一个Sprint冲刺第六天
    第一个Sprint冲刺第五天
    第一个Sprint冲刺第四天
    第一个Sprint冲刺第三天
  • 原文地址:https://www.cnblogs.com/ztoz/p/5737635.html
Copyright © 2020-2023  润新知