2016-08-25 4 views
0

Sagen wir, ich habe dies:Javascript: optionale Parameter in Funktion

function concatenate(a, b, c) { 
    // Concatenate a, b, and c 
} 

Wie gehe ich diese Anrufe?

x = concatenate(a) 

x = concatenate(a, b) 

x = concatenate(a, c) 

Wie kann ich meine Funktion bewusst die Parameter ich es gab zu machen?

+1

Verwenden Sie ein Array als Parameter. – Blobonat

Antwort

4

Jedes ungefüllte Argument wird undefined sein.

concatenate(a, c) entspricht concatenate(a, b). Sie können den dritten Parameter nicht übergeben, ohne den zweiten zu übergeben. aber Sie können undefined (oder null, nehme ich an) explizit übergeben: concatenate(a, undefined, c). In der Funktion können Sie nach undefined suchen und durch einen Standardwert ersetzen.

Alternativ können Sie ein Objektargument verwenden, um Schlüsselwortargumente zu imitieren: concatenate({a: a, c: c}).

+0

Ok, das ist, was ich dachte, danke – trichetriche

2

Verwenden Sie einfach arguments Array-ähnliches Objekt:

function concatenate() { 
    var result = ''; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 
0

von ES6/ES2015 auf Sie wie in php ähnlich tun können:

für die älteren Versionen können Sie tun:

function concatenate(a, b, c) { 
    if(typeof b !== 'undefined' && typeof c !== 'undefined') { 
    // code when a, b and c are defined 
    } else if (typeof b !== 'undefined' && typeof c == 'undefined') { 
    // code when a and b are defined 
    } else { 
    // code 
    } 

} 

Ich bin sicher, es gibt auch einen besseren Ansatz, sollte aber funktionieren.

2

Sie können die ES6 rest parameters Syntax verwenden, um das Array von Argumenten zu erhalten, und dann einfach join seine Elemente, um die verkettete Zeichenfolge abzurufen.

concatenate(a); 
concatenate(a, b); 
concatenate(a, c); 

function concatenate(...args){ 
    // for old browsers 
    // `...args` is an equivalent of `[].slice(arguments);` 
    return args.join(''); 
}