• typeof 和 instanceof apply与call简单用法以及判断数组的坑


    1 typeof 和 instanceof

    var array = [];
    平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”。

    typeof 一般只能返回如下几个结果:
    number,boolean,string,function,object,undefined。
    对于 Array,Null 等特殊对象使用 typeof 一律返回 object。

    所以你因该 :
    array instanceof Array 输出为 true;
    当然 :
    array instanceof Object 输出也为 true;
    因为 Array本身就是对象的子集。

    这也是为什么转化类数组为数组的方法为:
    Array.prototype.slice.call(arguments,0);
    当然:
    [].slice.call(arguments,0);也是可以的。


    2 call 和 apply


    上面既提到call的用法,那么我就顺便说一下call和apply的用法。

    apply:

    Function.apply(obj,args)方法能接收两个参数,
    obj:这个对象将代替Function类里this对象
    args:这个是数组,它将作为参数传给Function(args-->arguments, 指的是函数中的参数

    实例:
    function people(age,sex){
    this.age=age;
    this.sex=sex;
    };
    function adult(age,sex){
    people.apply(this,arguments)
    };
    var jack = new adult(18,'man');console.log(jack.age+":"+jack.sex)
    输出为 18:man;
    其实看到这段代码就知道apply怎么用了吧。
    其实apply 说到底就是为了使的一个对象可以使用不属于自己的方法,例如:jack.people(),这样肯定不行的!

    网上看到的关于apply一些延伸的方法:
    求最大值:var array = [1,2,3];Math.max.apply(null,array); // 3
    求最小值:var array = [1,2,3];Math.min.apply(null,array); // 1
    合并数组:var array1 = [1,2,3],array2 = [4,5,6];Array.prototype.push.apply(array1,array2);
    其实就是利用apply的特性将数组转化为参数列表[param1[,param2[,…[,paramN]]]],去处理这些问题。
    前两个方法是因为不接受数组,所以这样处理。
    第三个合并数组有很多其他方法,可以不这样用。

    call:

    Function.call(obj,[param1[,param2[,…[,paramN]]]])
    其实这里的参数列表 [param1[,param2[,…[,paramN]]]]= arguments;只是call 必须将参数列出来;
    如果运用上面的例子,输出的结果是一样一样的!

    如果还有其他延伸的有意思的方法给以发评论告诉我!

  • 相关阅读:
    SpringBoot+Mybatis 实现动态数据源切换方案
    mySql的case when用法
    mySql中The user specified as a definer ('root'@'%') does not exist
    jquery获取表单中的数据
    antdesign的input增加自定义校验规则
    net.sf.json将string转为map
    Js实现回车登录,监听回车事件
    css实现图片动画效果
    Freemarker + xml 实现Java导出word
    tomcat的jsp页面超过65535,导致500报错
  • 原文地址:https://www.cnblogs.com/Trr-984688199/p/6375762.html
Copyright © 2020-2023  润新知