J'ai remarqué une décision de transpiration quelque peu étrange de la part de babel, en ce qui concerne les paramètres optionnels. Le code ES6 suivant:Pourquoi Babel utilise l'objet `arguments` pour les paramètres optionnels?
function myFunction(x = 2, y = 3) {}
se transpiled à
function myFunction() {
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
}
J'ai bientôt une présentation sur la façon dont la syntaxe ES6 beaucoup plus courte et plus concise et comment il regarderais dans ES5 (via Babel d'habitude). Mais pour moi, cela semble un peu forcé et aussi beaucoup moins performant. Y at-il des raisons de ne pas faire cela ?:
function myFunction(x, y) {
x = x === undefined ? 2 : x;
y = y === undefined ? 3 : y;
}
Oui. Imaginez une fonction dans laquelle vous passeriez undefined comme argument. C'est pourquoi le contrôle de longueur est nécessaire. –
@JaredSmith: Si vous passez 'undefined' comme valeur pour un paramètre par défaut, la valeur par défaut est utilisée, pas' undefined'. –
Pour votre présentation, je ne comparerais pas la syntaxe ES2015 à l'apparence de l'équivalent ES5 lors de la transmission. Au lieu de cela, je voudrais comparer la syntaxe ES2015 avec ce que vous écririez réellement dans ES5, qui est peu susceptible de ressembler beaucoup à ce que Babel fait dans de nombreux cas (regardez en particulier ce qu'il fait avec 'class'). C'est plus informatif en termes de réels avantages de la nouvelle syntaxe. Je pense que nous pouvons tous être d'accord que votre premier bloc de code ci-dessus est plus concis que votre dernier (et beaucoup diraient plus clair aussi, mais c'est plus subjectif). –