Mehrere Werte in JavaScript zurückgeben?

Ich versuche, in JavaScript zwei Werte zurückzugeben. Ist das möglich?

var newCodes = function() {  
    var dCodes = fg.codecsCodes.rs;
    var dCodes2 = fg.codecsCodes2.rs;
    return dCodes, dCodes2;
};
Lösung

Nein, aber Sie könnten ein Array mit Ihren Werten zurückgeben:

function getValues() {
    return [getFirstValue(), getSecondValue()];
}

Dann können Sie auf sie wie folgt zugreifen:

var values = getValues();
var first = values[0];
var second = values[1];

Mit der neuesten ECMAScript 6-Syntax* können Sie den Rückgabewert auch intuitiver destrukturieren:

const [first, second] = getValues();

Wenn Sie jeden der zurückgegebenen Werte mit "Etiketten" versehen wollen (leichter zu pflegen), können Sie ein Objekt zurückgeben:

function getValues() {
    return {
        first: getFirstValue(),
        second: getSecondValue(),
    };
}

Und um auf sie zuzugreifen:

var values = getValues();
var first = values.first;
var second = values.second;

Oder mit ES6-Syntax:

const {first, second} = getValues();
  • Siehe diese Tabelle für die Browserkompatibilität. Grundsätzlich unterstützen alle modernen Browser außer dem IE diese Syntax, aber Sie können ES6-Code mit Tools wie Babel zur Erstellungszeit in IE-kompatibles JavaScript kompilieren.
Kommentare (5)

Ab Javascript 1.7 können Sie dies mit "destructuring assignments" tun. Beachten Sie, dass diese in älteren Javascript-Versionen nicht zur Verfügung stehen (d.h. weder mit ECMAScript 3rd noch 5th Edition).

Es erlaubt Ihnen, 1+ Variablen gleichzeitig zuzuweisen:

var [x, y] = [1, 2];
x; // 1
y; // 2

// or

[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4

Sie können auch Objektdestrukturierung kombiniert mit Eigenschaftswertkürzel verwenden, um die Rückgabewerte in einem Objekt zu benennen und die gewünschten Werte auszuwählen:

let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3

Und übrigens, lassen Sie sich nicht von der Tatsache täuschen, dass ECMAScript die Rückgabe von 1, 2, ...erlaubt. Was dort wirklich passiert, ist nicht das, was man vermuten könnte. Ein Ausdruck in einer Return-Anweisung -1, 2, 3- ist nichts anderes als ein Komma-Operator, der nacheinander auf numerische Literale (1,2und3) angewandt wird und schließlich den Wert des letzten Ausdrucks -3- auswertet. Deshalb istreturn 1, 2, 3funktionell identisch mit nichts anderem alsreturn 3`.

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Kommentare (7)

Geben Sie einfach ein Objektliteral zurück

function newCodes(){
    var dCodes = fg.codecsCodes.rs; // Linked ICDs  
    var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs       
    return {
        dCodes: dCodes, 
        dCodes2: dCodes2
    };  
}

var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);
Kommentare (1)