143 votes

Opérateur ternaire abrégé JavaScript

Je sais qu'en PHP 5.3 au lieu d'utiliser cette syntaxe redondante avec l'opérateur ternaire :

startingNum = startingNum ? startingNum : 1

...nous pouvons utiliser une syntaxe abrégée pour nos opérateurs ternaires, si elle s'applique :

startingNum = startingNum ?: 1

Et je connais l'opérateur ternaire en JavaScript :

startingNum = startingNum ? startingNum : 1

...mais y a-t-il une abréviation ?

3voto

a2441918 Points 737
startingNum = startingNum || 1

Si vous avez une condition avec null, comme

startingNum = startingNum ? startingNum : null

vous pouvez utiliser '&&'

startingNum = startingNum && startingNum

0 votes

Mais anything && null ne sera-t-il pas évalué à null à moins que anything ne soit falsy?

0 votes

Oui, si quelque chose est vrai, cela évalue à null. Si c'est faux, cela évalue à la valeur falsy

3voto

ClothSword Points 1559

Pour faire une opération ternaire comme:

condition_booléenne ? résultat_vrai : résultat_faux

en javascript, vous pouvez faire:

(condition_booléenne && résultat_vrai) || résultat_faux;

Exemple:

(true && 'vert') || 'rouge';
=> "vert"
(false && 'vert') || 'rouge';
=> "rouge"

0 votes

Donc x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24 deviendrait (innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24 ?? y a-t-il un raccourci, afin que je n'aie pas à répéter innerWidth * 0.0375, autre que de le mettre dans une variable ???

1 votes

Dans ce cas, Math.max( innerWidth * 0.0375 , 24 ) fonctionnerait élégamment. Pour un cas plus général, il serait bon de créer une méthode descriptive appelée par exemple 'somethingifiedInnerWidth' qui améliore la lisibilité, plutôt que de créer une variable. Bien que dans certains cas il serait plus lisible d'avoir une variable (de ce nom descriptif), afin que la question 'pourquoi est-il multiplié par ceci?' ne soit pas posée à l'avenir.

0 votes

Wow ne savais même que vous pouviez fournir un 2ème argument pour Math.max. super solution élégante !!

2voto

Daniel Points 66
var startingNum = startingNum || 1;

Dans ce cas, vous pouvez utiliser l'opérateur OU.

2voto

John Pace Points 63

Les réponses ci-dessus sont correctes. En JavaScript, l'instruction suivante :

startingNum = startingNum ? otherNum : 1

peut être exprimée comme

startingNum = otherNum || 1

Un autre scénario non abordé ici est si vous voulez que la valeur retourne faux lorsqu'elle n'est pas correspondante. L'abréviation JavaScript pour cela est :

startingNum = startingNum ? otherNum : 0

Mais cela peut être exprimé comme

startingNum = startingNum && otherNum

Je voulais simplement couvrir un autre scénario au cas où d'autres chercheraient une réponse plus généralisée.

0 votes

Existe-t-il un raccourci pour quelque chose comme ceci : x = innerWidth * 0,0375 > 24 ? innerWidth * 0,0375 : 24 ???

0 votes

@Anthony Non, car innerWidth * 0.0375 > 24 diffère de la partie si vrai qui est innerWidth * 0.0375. Le raccourci ne peut être utilisé que si l'expression à évaluer et le si vrai sont la même valeur. De la même manière, vous ne seriez pas en mesure de raccourcir x = someBoolean ? 'Heck yea!' : 'No way!'.

0 votes

@deedub eh bien, en réalité, il y a une "abréviation" (si vous voulez l'appeler ainsi) qui serait Math.max(innerWidth * 0.0375, 24)

0voto

Vous pouvez utiliser la réponse acceptée, mais ce n'est pas idéal car cela ne fonctionne pas avec les booléens, si vous définissez par défaut à true, cela évaluera toujours à true ->

var undefinedVal: boolean;
var trueVal = true;
var falseVal = false;

Exemple de modèle Angular :

Valeur : {{ undefinedVal || true }} -> true
Valeur : {{ trueVal || true }} -> true
Valeur : {{ falseVal || true }} -> true?

Utilisez donc la méthode longue lorsque vous utilisez des booléens :

Valeur : {{ (val != null) ? val : true }}

Remarque également pour TypeScript et C# (je crois), lors de l'utilisation d'un opérateur ternaire avec une concaténation de chaînes, cela doit être entre parenthèses ->

console.log("Value :" + ((val != null) ? val : true));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X