2016-10-18 10 views
3

私はそうのように、ES6で関数を定義するときは、パラメータ(残りパラメータ)で普及オペレータ構文を使用することができることを理解する:ES6でスプレッドシンタックスを使用する場合、デフォルトパラメータを使用しますか?

function logEach(...things) { 
    things.forEach(function(thing) { 
    console.log(thing); 
    }); 
} 

logEach("a", "b", "c"); 
// "a" // "b" // "c" 

私の質問:

デフォルトのパラメータを使用することはできますが普及した構文と一緒に?これはうまくいかないようです:

function logDefault(...things = 'nothing to Log'){ 
    things.forEach(function(thing) { 
    console.log(thing); 
    }); 
} 
//Error: Unexpected token = 
// Note: Using Babel 
+2

を使いたいでしょうか? 'things'は残りの引数を持つ配列で、デフォルトは空の配列です。 –

+0

何も渡されなかったかどうかを判断するために 'things.length'をチェックできませんでしたか? –

+3

'... things'は[restパラメータ](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters)と呼ばれています(「ギャザ」と呼ばれる人もいます)。構文は普及と同じですが、逆です。 – joews

答えて

2

左引数がないときはありません、残りのパラメータは空の配列が割り当てられます。デフォルトを提供する方法はありません。

あなたはなぜそれがどんな意味になるだろう

function logEach(...things) { 
    for (const thing of (things.length ? things : ['nothing to Log'])) { 
    console.log(thing); 
    } 
} 
2

JavaScriptは、休憩の引数のデフォルトをサポートしていません。あなたは、引数を分割し、関数本体でそれらの値をマージすることができ

function logDefault(head = "nothing", ...tail) { 
 
    [head, ...tail].forEach(function(thing) { 
 
    console.log(thing); 
 
    }); 
 
} 
 

 
logDefault(); // "nothing" 
 
logDefault("a", "b", "c"); // a, b, c

関連する問題