8
votes

courte main pour enchaînant des opérateurs logiques en JavaScript?

Y a-t-il un meilleur moyen d'écrire le suivant conditionnel en JavaScript? XXX

Je déteste avoir tous ces ours logiques enfilés ensemble. Je me demande s'il y a une sorte de raccourci.

merci!


1 commentaires

Voter pour fermer en tant que duplicata de Vérifiez l'égalité de variable sur une liste de valeurs ; Oui, c'est plus récent, mais les réponses sont beaucoup plus à jour. En d'autres termes, c'est le post plus "canonique".


7 Réponses :


2
votes

Nope, c'est le sténographie.

comme alternative, vous pouvez faire un commutateur xxx

qui est plus facile à gérer si Vous avez besoin de nombreuses valeurs possibles, mais votre version est en fait plus courte de toute façon :)


1 commentaires

S'il est mélangé, vous pouvez lancer une valeur à une chaîne et que la chaîne se compare. Plus lentement mais possible. Je pense aussi que cette option est davantage lisible que l'option présentée.



5
votes
if (value.in(1, 16, -500, 42.42, 'something')){
// blah blah blah
}

6 commentaires

Sachez simplement que la méthode array.prototype.indexof n'est pas disponible sur IE.


@Cms merci pour un précieux avis. Cependant, peut être fixé à la fois. Stackoverflow.com/Questtions/1744310/...


Cela pourrait faire une bonne fonction utilitaire pour éviter de rendre la déclaration si encore plus complexe que l'original. Il suffit de passer dans un tableau de valeurs et de voile que vous avez une syntaxe sténographique.


Je recommanderais fortement contre le prototypage sur objet . Outre la nature généralisée de la pollution des espaces de noms, il existe un risque élevé de casser le code qui utilise des objets comme mappages de recherche. Mieux vaut mettre ce type de méthode utilitaire sur le tableau array.pototype . En outre, cela vous permet d'utiliser la méthode contre des choses qui n'héritent pas de objet , nommément "objets hôtes" comme des nœuds DOM.


Ne pas Modifier des objets que vous ne possédez pas , spécialement objet.pototype !


@ Li0liq, au fait, dans est un mot réservé, car c'est un Mot-clé . Il ne devrait pas être utilisé comme identifiant ...



4
votes

Vous pouvez étendre l'objet tableau: xxx

puis si vous stockez toutes ces valeurs dans un tableau, vous pouvez faire quelque chose comme MyValues.Contains (valeur)


1 commentaires

Si la coercition de type n'est pas attendue, je vous recommanderais d'utiliser === au lieu de == , cependant imo, avec cette approche, la meilleure chose à faire est d'utiliser la norme array.pototype.indexof méthode, comme @ li0liq mention, est disponible Nativement sur tous les navigateurs sauf c.-à-coup d'accord.



0
votes

Le commutateur est un choix acceptable. Vous pouvez également utiliser une carte, en fonction de la complexité du problème (en supposant que vous avez plus que ce que vous mettez dans votre exemple).

var accept = { 1: true, 16: true, '-500': true, 42.42: true, something: true };
if (accept[value]) {
  // blah blah blah
}


0 commentaires

0
votes

Eh bien, vous pouvez utiliser une instruction de commutation ...

if ("1,16,-500,42.42,something".indexOf(value) !== -1) {
   // blah
}


0 commentaires

1
votes
var value= -55;
switch(value){
    case 1: case 16: case -55: case 42.5: case 'something': 
        alert(value); break;        

}

0 commentaires

-1
votes

Dans un effort pour faire encore une autre façon de le faire ...

if (/^(1|16|-500|42.42|something)$/.test(value)) {
  // blah blah blah
}


0 commentaires