JS Quiz: Vero o Falso? Teoria sulle stringhe

No, non stiamo parlando della composizione fisica della materia! Con questo articolo inizia una serie di approfondimenti su ciò che è "vero" e ciò che è "falso" in JavaScript. Il linguaggio più usato al mondo infatti ha dei comportamenti poco intuitivi che rischiano di confondere e creare errori di programmazione.



Tanto per incuriosirvi, eccovi il primo:

<script> if("")alert("vero"); //-> non mostra l'alert if("ciao")alert("vero"); //-> mostra l'alert if("ciao"==true)alert("vero"); //-> non mostra l'alert </script> Come già saprete, una stringa vuota corrisponde a FALSE. Ma come mai l'espressione ("ciao") corrisponde a TRUE mentre ("ciao"==true) a FALSE? "ciao" non viene forse interpretato proprio come TRUE? Oltretutto non sto neanche usando l'operatore "===", quindi il diverso tipo degli operandi non dovrebbe essere rilevante...

Il punto è che bisogna non bisogna considerare i singoli operandi bensì il risultato dell'espressione nella sua interezza! Proviamo a riscrivere il codice in un altro modo:

<script> var expression1 = "ciao" ; //-> expression1 è una stringa non vuota var expression2 = ("ciao"==true) ; //-> expression2 è FALSE if(expression1)alert("vero"); //-> mostra l'alert if(expression2)alert("vero"); //-> non mostra l'alert </script> Ecco, così il concetto è un po' più chiaro, ma i motivi che stanno dietro a questo strano comportamento si possono trovare soltanto nella specifica ECMASCRIPT:

  • "ciao" corrisponde a TRUE perchè il risultato di un'espressione costituita soltanto da una stringa è FALSE se la stringa è vuota (la sua lunghezza è zero), altrimenti è TRUE.
  • "ciao" è diverso da TRUE perchè l'operatore "==" in caso di confronto tra booleano e stringa converte quest'ultima in numero e lo confronta con i valori numerici di TRUE e FALSE ovvero 1 e 0. Una stringa non numerica e non vuota però viene convertita in NaN ("ciao" * 1 -> NaN), che è diverso da 1.

A presto per una nuova puntata di JS Quiz!