Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    214

    scelta controllata doppia

    In questo codice la scelta controllata con due condizioni separate da OR (scelta !="s" || scelta !="n") non è eseguita, mentre con una sola condizione (scelta !="s") è eseguita. Desidero sapere perché. Grazie

    lanvoel

    codice:
    <!DOCTYPE html>
    <html>
    <head>
    <title>scelta controllata</title>
    <script>
    var scelta;
    function scegli()
    {
    scelta=prompt("vuoi continuare (s/n) ? ","n");
         if (scelta !="s" || scelta !="n")
          {
          scegli();
          }
    }
    </script>
    </head>
    <body>
    <script>
    scegli();
    document.write("input: " + scelta);
    </script>
    </body>
    </html>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,685
    Ciao, la condizione viene eseguita come tu l'hai impostata; in sostanza si tratta esattamente di una "condizione sempre vera"; è solo una questione di logica.

    Tieni presente che l'espressione nella condizione viene esaminata frammento per frammento da sinistra verso destra; usando un operatore || (OR logico) il risultato dell'intera condizione è true se almeno uno dei frammenti è true, per cui l'interprete JavaScript si interrompe al primo valore true che incontra; il resto non serve che sia esaminato, dal momento che l'esito della condizione è già stabilito.

    In questa tua espressione:
    codice:
    scelta !="s" || scelta !="n"
    l'omino JavaScript analizza per primo il frammento sulla sinistra:
    codice:
    scelta !="s"
    se questo restituisce false, allora prosegue con l'analisi del secondo; se invece restituisce true, allora l'intera condizione è true, quindi l'analisi si interrompe qui, e ovviamente viene eseguito il codice nel corpo della condizione.

    Ora, questo primo frammento ci vuole poco a renderlo true; basta che scelta sia diverso da "s", giusto?
    In questo caso l'esito dell'intera condizione è già stabilito come true, quindi non c'è bisogno di esaminare il resto.

    Mettiamo invece che il primo frammento restituisca false (quindi scelta è uguale "s"); pertanto l'omino JavaScript è costretto ad esaminare anche il secondo frammento. Qui però abbiamo un dato certo, cioè scelta è uguale "s", per cui non potrà mai essere uguale a "n", giusto?
    In questo caso, dato che il frammento scelta !="n" restituisce true, l'esito della condizione sarà anch'esso true.

    Ecco perché si tratta di una "condizione sempre vera".

    La soluzione è molto semplice: dovrai usare un operatore && (AND logico) anziché ||.
    codice:
    if (scelta != "s" && scelta != "n")
    Lo stesso risultato puoi ottenerlo con un || ma usando delle uguaglianze dentro un blocco di parentesi e negando tale blocco:
    codice:
    if (!(scelta == "s" || scelta == "n"))
    Ultima modifica di KillerWorm; 06-04-2018 a 13:21
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    214
    Grazie KillerWorm, anche per la tua "meticolosa pazienza didattica"
    e un saluto

    lanvoel

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.