Mi imbatto in questo tipo di espressioni e ho difficoltà a leggerlo. Come lo leggi correttamente per vedere se è corretta la logica durante il debug.
if (!(userLoggedIn || isAdmin)) {
console.log('User does not have rights');
}
In primo luogo amplia la stenografia
if (! (userLoggedIn = true || isAdmin = true ))
Quindi sostituisci gli operatori logici con le parole
if (not (userLoggedIn = true or isAdmin= true))
Quindi traduci
If the user is not either logged in or admin
{
//do something
}
Una volta che ci hai pensato in questo modo la prima volta, l'originale diventa piuttosto banale da leggere in una volta sola - improvvisamente indica chiaramente "se l'utente non è loggato o amministratore" senza alcuna necessità di tradurre, questo è anche la bellezza dei buoni nomi delle variabili Booleani visti in questo esempio
if (!(userLoggedIn || isAdmin))
Generalmente,! (a || b) = > (! a & &! b),
so! (userLoggedIn || isAdmin) = > ! userLoggedIn & & ! isAdmin,
che è molto più chiaro per me, probabilmente a causa della mancanza di parentesi
Per me la logica sottostante è:
userLoggedIn || isAdmin
dice "l'utente deve essere registrato o in modalità amministratore".
if(!...)
dice "Se non è il caso, allora ...".
Prendendo insieme il tuo codice significa "se non è il caso in cui l'utente è connesso o è in modalità admin, quindi stampa il messaggio di errore".
Questo mi fa chiedere se non volevi dire che l'utente deve essere loggato e avere i diritti di amministratore. In tal caso, devi sostituire ||
di &&
.
Leggi altre domande sui tag javascript naming boolean