2013-02-02 10 views
17

Beim Betrachten einer Frage im Zusammenhang mit der Portierung eines PHP function to JavaScript. Ich sah, was ich annehmen war falsch JavaScript:Unterstützen Funktionsargumente einen Standardwert in JavaScript?

function my_isnum(str, negative=false, decimal=false) 

Dann habe ich versucht, dies in JSFiddle:

function my_isnum(str, negative=false, decimal=-2) 
{ 
    console.log(arguments); 
    console.log(str); 
    console.log(negative); 
    console.log(decimal); 
} 
my_isnum("5", "Hi"); 

Und zu meinem großen Erstaunen das ist, was ich in der Firebug-Konsole sehen:

["5", "Hi"] 
5 
Hi 
-2 

Jetzt in Chrome ist das, was ich sehe:

Uncaught SyntaxError: Unexpected token = 

Was ich nicht verstehe, ist dies ein Beispiel für einen frühen Standard, der von Firefox unterstützt wird (die MDN auf function scheint dies nicht zu erwähnen)?

+0

Ich bin erstaunt FF zeigt das auch! – Popnoodles

+0

Firefox-JavaScript ist eine Obermenge von ECMAScript 3. Es hat Funktionen, die keine Standardsyntax sind. Dazu gehören Array-Comprehensions, Let-Ausdrücke und Destrukturierungszuweisungen. –

Antwort

4

Sortieren von. Sie können, wie etwas tun:

function the_func(some_val) { 
    // if some_val is not passed to the_func 
    if (typeof some_val == 'undefined') { 
     some_val = 'default_some_val'; 
    } 

    // now you can use some_val in the remaining parts of the method 
} 
+0

vielleicht mit zwei weniger Zeilen obwohl. – Popnoodles

+1

Und das ist, wie 100% meines Codes und jedes andere Argument, Code zu überprüfen, den ich jemals in JavaScript gesehen habe. –

+0

Kann etwas tun wie: some_val = (typeof some_val! == 'undefined')? einige_val: 'defaultVal'; – javaBean007

8

Lostsource Antwort richtig ist, kommen ECMA6, Standardwerte werden sehr wahrscheinlich unterstützt werden, ich denke es wird, aber da es immer noch ein Arbeitsentwurf ist, können Sie nicht wirklich sicher sein ... Für jetzt können Sie die logische oder verwenden:

Das funktioniert, irgendwie, wie ein ternäres. Die Ausdrücke sind entschlossen, von links nach rechts: sobald JS einen truthy Wert trifft, ist das, was zugewiesen wird:

var someVar = false || undefined || null || 0 || 1; 

1 bis someVar zuweist. Wenn keine Werte an eine Funktion übergeben werden, werden alle Argumente undefined vorbelegt, so dass in diesem Fall:

myArgument = myArgument || 'default'; 
//is the same as: 
myArgument = undefined || 'default';//evaluates to "default" 

Aber wenn man false als Argument übergeben, oder null oder eine leere Zeichenfolge, wird der Wert standardmäßig zugewiesen sein, also sei vorsichtig.
In diesen Fällen passt ein if/ternary besser (wie in der Antwort von JollySin zu sehen ist). Das ternäre Äquivalent davon ist:

some_val = typeof some_val === 'undefined' ? 'default' : some_val; 
Verwandte Themen