L'omission de la deuxième expression lors de l'utilisation de l'if-else abréviation
Puis-je écrire le if else
abréviation sans else
?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
J'ai remarqué en mettant null
pour le reste fonctionne (mais je n'ai aucune idée de la raison ou si c'est une bonne idée).
Edit: Certains d'entre vous semblent perplexes pourquoi je me donnerais la peine de les essayer. Rassurez-vous, il est purement de la curiosité. J'aime déconner avec le JavaScript.
- Je pense qu'il y a un
var | var
de la syntaxe. Attention, c'est potentiellement difficile de "voir", en particulier (OMI) ternaires problématiques. À utiliser avec parcimonie. - N'est-ce pas le point de l'ensemble de ternaires qu'ils sont plus faciles à "voir" de l'aide si les déclarations? Aussi quelle est la syntaxe que vous êtes en train de parler, il semble intéressant .
- Non, je ne pense pas qu'ils soient plus facile à tous dans tous les cas. Le "point" dans mon esprit, c'est soit de le mettre sur une seule ligne ("mes codes plus courte que la vôtre"), ou pour certains, littéral cas avec simpliste résultats. L'empilement ternaires est particulièrement pernicieuse et devrait être évitée à tout prix.
:)
- J'ai vu quelque chose comme
foo = bar | cat;
, où, si la première est fausse? null?, il "tombe à l'eau" pour le second. Je n'ai vu que lui, bien que, et ne l'utilisez pas. - Il n'est pas un problème de faire quelque chose comme ceci: var foo = bar || soap; où le bar est un falsy valeur (rappelez-vous, js a six différents falsy valeurs). Cela va faire foo la valeur de savon. Je l'utilise souvent lors de la création des "espaces de noms", où on ne sait jamais si une valeur est définie ou non, à l'instar de ce. var ns = ns || {}; ns.quelque chose = {} // un autre espace de noms.
- C'est
a || b
oua && b
, sinonb
seront toujours évaluées. - Le Code est pour le plaisir du lecteur, de sorte que si une approche a un impact significatif sur les codes d'exécution sur une autre approche pour la même chose, la concision ne devrait pas prendre une approche "best". Il m'arrive de penser à plein
if
états plus lisible/analyser en un scan de la page. Mais je suis sûr que d'autres sont en désaccord. - Eh bien je suis d'accord avec vous, mais ces cas ne se produisent, et ternaires ne aider à la lisibilité dans ces cas.
- Ah ok, merci. Est-ce un
XOR
? - Les bons points, j'aime cette forme dans la pratique plus ternaires. Je suis juste des préjugés contre les ternaires, je suppose. Trop facile de laisser "intelligent" s'échapper et avec un peu d'eau et des collations pendant la nuit vous avez un gremlin dans votre code.
- Je n'utilise jamais ternaire opérateurs de définir une valeur, car il est moins détaillé que l'ifs. mais pour tout le reste (ou si le ternaire expression devient à de longs et/ou complexes) j'utilise le si construire qu'elle est plus facile à lire.
- vrai, vous ne devriez jamais utiliser le code que vous êtes à 100%, vous savez ce qui est en train de faire.
a != b
oua ^ b
. A et b devront être évalués, xor n'a pas de court-circuit.XOR
obtient ma chèvre. Je pense que leXOR
de l'assistant d'été de l'alimentation, trop. Encore un mystère de ce qu'il fait, dans la pratique, logiquement.- Aussi, est il y a un nom pour la construction de
var a = b || c
? - Je ne pense pas qu'il y a un nom spécifique, mais voir stackoverflow.com/questions/1378619/javascript-operator et les questions connexes.
- Bien qu'il n'est pas nécessairement le "nom" de l'approche de cette pratique, je pense que le "court-circuit" est probablement le meilleur ajustement.
condition && (codetorun)
ils façon dont cela fonctionne est que les && retourne true si les deux sont vrais. Donc, si la condition est vraie, il va à la deuxième qui est entre parenthèses, donc il calcule que, d'abord, de l'exécuter. puis retourner true/false. Mais nous ne sont concernés par l'acte d'exécution. Alors quand c'est la condition est fausse, elle retourne faux, car il n'est pas nécessaire d'évaluer la 2e déclaration comme résultat sera faux.statement || statement
de l'autre côté s'exécute d'abord un, puis la deuxième. si la première est fausse; donc en face de&&
.||
retourne si un seul est vrai, donc si la première affirmation est fausse, la seconde sera évalué si, dans les parenthèses, puis courir, et s'en retourna.- La bonne réponse à cette question est l'une par NickC stackoverflow.com/a/11069295/1044366 Malheureusement, il n'a pas été marquée comme la réponse correcte.
Vous devez vous connecter pour publier un commentaire.
C'est aussi une option:
dosomething()
sera appelée uniquement six==2
est évaluée à vrai. Ceci est appelé De court-circuit.Il n'est pas couramment utilisé dans les cas de ce genre et vous ne devriez pas écrire le code comme ceci. J'encourage cette approche plus simple:
Vous devriez écrire un code lisible en tout temps; si vous êtes inquiet au sujet de la taille du fichier, il suffit de créer une version minifiée de avec l'aide de l'un des nombreux JS compresseurs. (e.g Google Compilateur De Fermeture)
if (1 - 1 === 0) $('.woot').text('Woot!');
je l'utiliser tout le temps avec PHP, et maintenant que je suis l'adoption de Coffeescript, je l'utilise dans mon Javascript.if x==2 && doSomething() || doSomethingElse()
if loop
changements en Court-circuit.doSomething() if x === 2
. Je ne suis pas miss Ruby, mais je ne manquez pas ça.Ce que vous avez est assez inhabituel d' opérateur ternaire. Habituellement, il est utilisé comme une expression, pas une déclaration, à l'intérieur d'une autre opération, par exemple:
Donc, pour des raisons de lisibilité (car ce que vous faites est rare), et parce qu'elle évite le "else" que vous ne voulez pas, je vous suggère:
Une autre option:
Si vous ne faites pas l'autre, pourquoi ne pas le faire:
À l'aide de
null
est très bien pour l'une des branches d'un ternaire expression. Et un ternaire expression est fine comme une déclaration en Javascript.Comme une question de style, cependant, si vous avez à l'esprit d'appeler une procédure, il est plus clair d'écrire cela à l'aide de if..else:
ou, dans votre cas,
Un tout petit plus de cette très, très vieux thread..
Disons que votre e à l'intérieur d'un
for
boucle et de la nécessité d'évaluer une variable pour unetruthy/falsy
valeur avec un opérateur ternaire, tandis que dans le cas où il estfalsy
vous voulezcontinue
- tu vas avoir un problème parce que votre e non retour d'un expression ,vous revenez à la place d'un déclaration sans aucune valeur.Ceci va produire
Uncaught SyntaxError: Unexpected token continue
Donc, si vous voulez retourner une déclaration et d'utiliser une ligne de votre code, même s'il peut sembler un peu bizarre au premier coup d'œil et peut ne pas respecter strictement l'utilisation de la langue, vous pouvez faire ceci à la place:
Techniquement, mettre la valeur null ou 0, ou juste un peu aléatoire valeur il fonctionne (puisque vous n'êtes pas à l'aide de la valeur de retour). Cependant, pourquoi êtes-vous à l'aide de cette construction à la place de la
if
de construire? Il est moins évident que ce que vous essayez de le faire lorsque vous écrivez le code de cette façon, comme vous l'avez peut embrouiller les gens avec le no-op (null dans votre cas).Probablement la plus courte
JS: