J'ai toujours dû mettre null
dans les autres conditions qui n'ont rien. Y a-t-il quelque chose autour? Par exemple
condition ? x = true : null;
en gros, y a-t-il un moyen de faire:
condition ? x = true;
Maintenant, il apparaît comme une erreur de syntaxe
Pour info, voici un vrai exemple de code:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
javascript
optimization
syntax-error
Oscar Godson
la source
la source
condition ? x = true : null;
devrait probablement s'écrirex = (condition ? true : null);
. Ennull
passant , en javascript est évalué à faux, donc dans CE cas, vous pouvezx = (condition);
et obtenir le même résultat.if (!defaults.slideshowWidth) defaults.slideshowWidth = obj.find('img').width()+'px'
Réponses:
Tout d'abord, une expression ternaire ne remplace pas une construction if / else - c'est un équivalent à une construction if / else qui renvoie une valeur. Autrement dit, une clause if / else est du code, une expression ternaire est une expression , ce qui signifie qu'elle renvoie une valeur.
Cela signifie plusieurs choses:
=
valeur de retourx = true
renvoie true car toutes les expressions renvoient la dernière valeur, mais change également x sans que x n'ait d'effet sur la valeur renvoyée)En bref - l'utilisation `` correcte '' d'une expression ternaire est
Au lieu de votre exemple
condition ? x=true : null ;
, où vous utilisez une expression ternaire pour définir la valeur dex
, vous pouvez utiliser ceci:Ceci est toujours une expression et peut donc ne pas passer la validation, donc une approche encore meilleure serait
Le dernier passera la validation.
Mais là encore, si la valeur attendue est un booléen, utilisez simplement le résultat de l'expression de condition elle-même
MISE À JOUR En ce qui concerne votre échantillon, c'est probablement plus approprié:
la source
i/else
fautes de frappe car ce n'est pas assez de caractères.void()
. Merci.Non, il faut trois opérandes. C'est pourquoi on les appelle ternaires opérateurs .
Cependant, pour ce que vous avez comme exemple, vous pouvez faire ceci:
Bien qu'il soit plus sûr d'avoir des accolades si vous devez ajouter plus d'une instruction à l'avenir:
Edit: Maintenant que vous mentionnez le code réel dans lequel votre question s'applique à:
la source
Le plus souvent, les gens utilisent des opérateurs logiques pour raccourcir la syntaxe de l'instruction:
Mais dans votre cas particulier, la syntaxe peut être encore plus simple
Ce code renverra la
defaults.slideshowWidth
valeur si ledefaults.slideshowWidth
est évalué à vrai et laobj.find('img').width()+'px'
valeur dans le cas contraire.Voir l' évaluation de court-circuit des opérateurs logiques pour plus de détails.
la source
la source
(defaults.slideshowWidth) || (defaults.slideshowWidth = obj.find('img').width()+'px')
oudefaults.slideshowWidth = defaults.slideshowWidth || (obj.find('img').width()+'px')
Tu pourrais écrire
Ainsi, x n'est pas modifié lorsque la condition est fausse.
Ceci est alors équivalent à
ÉDITER:
Il existe quelques alternatives - je ne dis pas que ce sont meilleures / pires - simplement des alternatives
La transmission de null comme troisième paramètre fonctionne car la valeur existante est nulle. Si vous refactorisez et modifiez la condition, il y a un risque que ce ne soit plus vrai. Passer la valeur existante comme 2ème choix dans les gardes ternaires contre ceci:
Plus sûr, mais peut-être pas aussi agréable à regarder, et plus de frappe. En pratique, j'écrirais probablement
la source
Dans votre cas, je vois l'opérateur ternaire comme redondant. Vous pouvez affecter la variable directement à l'expression, en utilisant les opérateurs ||, &&.
va devenir :
C'est plus clair, c'est plus du style "javascript".
la source
Qu'en est-il simplement
la source
Pour utiliser un opérateur ternaire sans autre à l'intérieur d'un tableau ou d'une déclaration d'objet, vous pouvez utiliser l'opérateur de propagation ES6
...()
Et pour les objets:
source primaire
la source