zoukankan      html  css  js  c++  java
  • arguments

    arguments是函数内部自带类数组对象。保存函数执行时的实际参数。

    // 声明函数,声明语句中书写的参数都是形参
    function fun(a,b,c){
    // arguments是函数内部自带的对象
    console.log(arguments);
    console.log(typeof(arguments));
    }
    // 函数的执行 fun(1,2,3,4,5,6,7);

    执行结果:Arguments(7) [1, 2, 3, 4, 5, 6, 7, callee: ƒ, Symbol(Symbol.iterator): ƒ]      object

    返回的是一个类数组对象,并且把所有的值都返回,如果没有arguments,则只会返回前三个数。arguments返回的是所有的实际参数。

    arguments与数组不相同的地方

    读取数据和数组的方式相同  [index]

    console.log(arguments[0]);

    赋值方式  =

    console.log(arguments[0]=100);

    length属性

    console.log(arguments.length);

    arguments只能通过length属性强制将数组拉长,不能通过索引值

    索引值方法

    arguments[10]=10;
    console.log(arguments.length);

    长度依然是7,没有改变

    length属性方法

    arguments.lengtn=10;
    console.log(arguments.length);
    console.log(arguments);

    长度变为10,没有赋值的显示undefined

    arguments与数组不相同的地方

    slice方法(数组截取,start包括,end不包括)

    console.log(arguments.slice(1,5));

    error

    用途

    重载:函数名相同,参数个数不同

    在js中没有重载现象,函数名相同,参数个数不同,表示的是相同的函数,后面会层叠前面的。

           // 函数名相同,参数个数不同
            function fun(a){
                console.log(1);
            }
            function fun(a,b,c){
                console.log(2);
            }
            // 调用函数
            fun();

    输出结果是2,只要调用输出都是2,所以在js中不能实现重载

    利用arguments可以模拟函数的重载

    需求:当参数个数为2个时,两个参数相加;当参数个数为3个时,前两个参数的较大值加上第三个参数;当参数个数大于3个时,输出错误

    function fun(a,b,c){
                if(arguments.length===2){
                    return a+b;
                }else if(arguments.length===3){
                    return a > b ? a : b;
                }else{
                    return "error";
                }
            } 

    类数组对象:对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情况下,这些对象被称为“类数组对象”。

    var o ={0:42,1:52,2:63,length:3}
    console.log(0);
    // 输出为42
    console.log(Array.prototype.join.call(o));
    // 在类数组对象上应用数组的操作方法,在ECMAScript 5标准中,
    // 可以用以上方法来将上面的对象o合并成字符串
    // 输出为"42,52,63"
  • 相关阅读:
    IO模式和IO多路复用详解
    消息队列RabbitMQ、缓存数据库Redis
    rest framework认证组件和django自带csrf组件区别详解
    django进阶之缓存
    关于CSRF攻击详解
    Linux学习常用命令大全
    .NET 开源工作流: Slickflow流程引擎基础介绍(四) -- 多数据库支持实现
    .NET 开源工作流: Slickflow流程引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
    .NET 开源工作流: Slickflow流程引擎基础介绍(二) -- 引擎组件和业务系统的集成
    .NET开源敏捷开发框架: SlickOne介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架
  • 原文地址:https://www.cnblogs.com/tasly/p/11524864.html
Copyright © 2011-2022 走看看