zoukankan      html  css  js  c++  java
  • deep-in-es6(四)

    不定参数和默认参数:

        function containsAll(str) {
            for(var i = 1;i < arguments.length;i++) {
            var hasStr = arguments[i];
            if( str.indexOf(hasStr) == -1 ) {
                return false;
            }
        }
        return true;
        }
        console.log( containsAll("banana","b","nan") );//true
        console.log( containsAll("banana","c","nan") );//false

    上面例子中使用到了arguments对象,它是一个类数组对象,包含了传递给函数的所有参数。这样的的传参无法看到参数的具体个数,还有参数是从1开始迭代,arguments[0]相当于参数,如果要添加了参数,则必须要重新遍历参数。

    es6中的不定参数:

        function containsAll6(str,...needles) {
            //alert(needles.length);
            for(var needle of needles) {
                if(str.indexOf(needle) == -1) {
                    return false;
                }
            }
            return true;
        }
        //test...
        console.log( containsAll6("banana","b","nan") );// alert() == 2["b","nan"] true

    ...needles是es6中的信语法,称为不定参数。执行函数后,传进来的第一个参数赋值给str,...neddles不定参所有传递的参数被放到一个数组中,赋值给变量needles。
    所有函数中,只有最后一个才可以被标记为不定参数。函数调用时,不定参数前的所有参数正常填充,参数都被放进一个数组中并赋值给不定参数,如果没有额外的参数,不定参数就是个空数组。永远不会是undefined。


    默认参数:
    通常情况下函数调用者不需要传递是有可能的函数,没有被传递的参数可由感知到的默认参数进行填充。JavaScript有严格的默认参数格式,未被传值的参数默认为undefined。es6引入了一种新的方式,可以指定任意参数的默认值。

        function animalSentence(animals2="tiggers",animals3="bears") {
            return `lions and ${animals2} and ${animals3}! oh my!`;
        }
        console.log(animalSentence());//lions and tiggers and bears! oh my!
        console.log(animalSentence("mouse"));//lions and mouse and bears! oh my!
        console.log(animalSentence("pig","cat"));//lions and pig and cat! oh my!

    默认参数的定义形式:[param1=[defaultValue1],...,paramN=[defaultValueN]],对于每个参数而言,定义默认值时=后面的部分是一个表达式,如果调用者没有传递参数,将使用表达式的值作为默认的参数。
    注意细节:
    默认值表达式在函数调用是自左向右求值,这也意味着默认表达式可以使用该参数之前已经填充好的其他参数。

        function animalSentencFancy(animals2="tiggers",animals3=(animals2 == "bears")?"sealions":"bears") {
            return `lions and ${animals2} and ${animals3}! oh my!`;
        }
        console.log(animalSentencFancy("bears"));//lions and bears and sealions! oh my!  animals3的表达式是一个三元运算
        console.log(animalSentencFancy(undefined,"unicorns"));
    //lions and tiggers and unicorns! oh my! undefined值等于不传值,没有默认值的参数隐式默认为undefined。 function myFn(a=42,b) {...}//参数是合法的等价与 function myFn(a=42,b=undefined) {...}
  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/intelwisd/p/7968078.html
Copyright © 2011-2022 走看看