1. 程式人生 > >deep-in-es6(四)

deep-in-es6(四)

等價 格式 一個 default 等於 傳值 index cat ani

不定參數和默認參數:

    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) {...}

deep-in-es6(四)