2017-09-24 1 views
-1

J'utilise Moment.JS pour vérifier si le jour en cours n'est pas un dimanche ou un samedi. Si ce n'est pas le cas, faites une opération.Else-Si les instructions en JavaScript semblent provoquer un comportement étrange dans Moment.js en semaine

Voici mon code:

let currentDay = moment().weekday(); 

if(currentDay !== 0 || currentDay !== 6){ 
    doSomeOperation(); 
    } else { console.log("we should get here on a Sunday"); } 

Ce me prend tout son sens - si currentDay est pas le dimanche ou le samedi puis doSomeOperation(); (Pour le contexte, je suis en ce un dimanche.)

Cependant , il échoue et il exécute la méthode doSomeOperation(); dans le bloc if. Je l'ai exécuté dans toutes les combinaisons possibles, mais cela échoue toujours. J'ai alors décidé de les faire fonctionner séparément.

if(currentDay !== 0){ 
     doSomeOperation(); 
    } else { console.log('you should get here'); } 

Cela réussit - je reçois au bloc else. Cela n'a aucun sens - parce que si cela a réussi, alors pourquoi ce qui précède a-t-il échoué?

J'ai finalement changé ce tour à ceci:

if ((currentDay === 0 || currentDay === 6)){ 
console.log('you should get here'); 
} else { doSomeOperation() } 

Cela réussit et j'imprimer "vous devriez obtenir ici. Si j'inverse les opérateurs alors tous les contrôles passent. Ma question est qu'est-ce que je fais mal?

Répondre

2

Vous devez prendre un ET logique dans la condition, car vous souhaitez exclure les deux jours.

if (currentDay !== 0 && currentDay !== 6) { 
    // do some operations 
} 

Nier l'état, vous pouvez appliquer De Morgan's laws

if (currentDay === 0 || currentDay === 6) { 
    // saturday or sunday 
} else { 
    // other days 
    // do some operations 
} 
+0

Salut @Nina - merci pour votre réponse. Pourquoi était-ce quand j'ai inversé les opérateurs, ils ont tous travaillé avec le OU logique? – xn139

+0

cela ne fonctionne pas avec equal et or, car chaque partie est parfois 'true' et la condition est toujours' true'. –

+1

Quand j'ai des problèmes avec if, j'essaie toujours de les transformer en questions pour voir si elles ont du sens. Si je ne peux pas alors, il y a généralement un problème avec le code. Ou le code est trop compliqué et doit être décomposé. –