2016-11-03 2 views
0

J'utilise plusieurs opérateurs ternaires à la place des instructions case select.Inspection WebStorm sur l'expression virgule dans l'opérateur JavaScript ternaire

Cela fonctionne très bien à ma connaissance, mais je reçois maintenant beaucoup d'avertissements d'inspection de WebStorm me disant que les expressions de virgule pourraient être trop intelligentes et peuvent conduire à des bugs subtils. Il y a aussi des avertissements sur la valeur assignée qui n'a jamais été utilisée.

Est-ce l'utilisation correcte d'un opérateur ternaire ou dois-je utiliser quelque chose de différent pour être du bon côté?

u_avg < siteColorArray[0] ? 
    (fillColor = '#FF6600', strokeColor = '#FF8C00') : 
    u_avg < siteColorArray[1] ? 
    (fillColor = '#FF8C00', strokeColor = '#FFB300') : 
     u_avg < siteColorArray[2] ? 
     (fillColor = '#FFB300', strokeColor = '#FFD900') : 
     u_avg < siteColorArray[3] ? 
      (fillColor = '#FFD900', strokeColor = '#FFFF00') : 
      u_avg < siteColorArray[4] ? 
      (fillColor = '#FFFF00', strokeColor = '#CDE30F') : 
      u_avg < siteColorArray[5] ? 
       (fillColor = '#CDE30F', strokeColor = '#9CC71E') : 
       u_avg < siteColorArray[6] ? 
       (fillColor = '#9CC71E', strokeColor = '#6AAA2D') : 
       u_avg < siteColorArray[7] ? 
        (fillColor = '#6AAA2D', strokeColor = '#388E3C') : 
        u_avg >= siteColorArray[7] ? 
        (fillColor = '#388E3C', strokeColor = '#2E7D32') : 
        null; 

WebStorm ne l'aime pas beaucoup ...

enter image description here

Edit: Juste pour clarifier les choses. Cela fonctionne bien sur Chrome 54+, mais je suis préoccupé par le fait que d'autres plateformes plus anciennes ne l'apprécient pas.

Répondre

0

Vous devez définir une variable au résultat:

var test = u_avg < ... 
+0

Mais ne serait jamais utilisé le test variable. Ne serait-ce pas ajouter une allocation de variable inutile? –

+0

Juste en revue ce que vous avez fait plus en détail. Il n'est pas courant de définir des variables à l'intérieur du ternaire, normalement, il renvoie une valeur unique à 'fillColor', et vous avez alors une autre instruction séparée pour' strokeColor'. Cela fonctionne-t-il réellement comme vous l'avez? –

+0

Oui. cela fonctionne bien dans Chrome sur ma machine dev. Je déclare les deux couleurs avant la chaîne ternaire et j'attribue ensuite ces couleurs à un objet après le ternaire. Je suis juste préoccupé par l'avertissement d'inspection. –