Ik probeer twee waarden terug te geven in JavaScript. Is dat mogelijk?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
Nee, maar je zou een array met je waarden kunnen teruggeven:
function getValues() {
return [getFirstValue(), getSecondValue()];
}
Dan kun je ze als volgt benaderen:
var values = getValues();
var first = values[0];
var second = values[1];
Met de nieuwste ECMAScript 6 syntax*, kun je de return waarde ook intuïtiever destructureren:
const [first, second] = getValues();
Als u "labels" op elk van de geretourneerde waarden wilt zetten (gemakkelijker te onderhouden), kunt u een object retourneren:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
En om ze te benaderen:
var values = getValues();
var first = values.first;
var second = values.second;
Of met ES6 syntaxis:
const {first, second} = getValues();
* Zie deze tabel voor browser compatibiliteit. In principe ondersteunen alle moderne browsers behalve IE deze syntaxis, maar u kunt ES6-code compileren tot IE-compatibele JavaScript tijdens het bouwen met tools zoals Babel.
U kunt dit doen vanaf Javascript 1.7 met behulp van "destructuring assignments". Merk op dat deze niet beschikbaar zijn in oudere Javascript versies (dat wil zeggen - noch met ECMAScript 3e noch 5e edities).
Hiermee kun je aan 1+ variabelen tegelijk toewijzen:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
Je kunt ook object destructuring gecombineerd met property value shorthand gebruiken om de return values in een object een naam te geven en diegene eruit te pikken die je wilt:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
En tussen haakjes, laat je niet misleiden door het feit dat ECMAScript je toestaat om return 1, 2, ...
. Wat daar werkelijk gebeurt is niet wat het lijkt. Een uitdrukking in return statement - 1, 2, 3
- is niets anders dan een komma operator toegepast op numerieke literalen (1
, 2
, en 3
) opeenvolgend, die uiteindelijk evalueert naar de waarde van de laatste uitdrukking - 3
. Daarom is return 1, 2, 3
functioneel identiek aan niets meer dan return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Stuur gewoon een letterlijk object terug
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);