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"
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/tasly/p/11524864.html
Copyright © 2011-2022 走看看