JavaScript, HTML, CSS e... !
0 commenti

MEME JavaScript #005

Spieghiamo il MEME JavaScript: null > 0 è false, null == 0 è false ma null >= 0 è true

Questo MEME sul JavaScript fa leva sul comportamento degli operatori di confronto quando gli operandi non sono necessariamente valori numerici:

Puoi trovare maggiori informazioni sugli operatori nella video lezione dedicata del mio corso sul JavaScript Semplificato per Google: https://www.youtube.com/watch?v=9agqHjskIW8

Eseguiamo in console le stesse operazioni del MEME per assicurarne il risultato.

Se null > 0 risponde false

e null < 0 risponde false

e anche null == 0 risponde false

allora perché null >= 0 risponde true?

Per completezza, anche null <= 0 risponde true, ma non ci aiuta molto a capire il motivo.

La spiegazione invece, si può trovare consultando le specifiche di ECMAScript, uno standard di linguaggio di scripting pensato per garantire l'interoperabilità delle pagine web tra diversi browser e, in particolare, nella sezione dedicata agli operatori di confronto.

Per quanto riguarda gli operatori minore, maggiore, minore uguale e maggiore uguale, nel caso specifico dell’esempio, danno il risultato di un confronto relazionale astratto che segue alcune specifiche regole.

All'atto pratico JavaScript tenta di convertire in numero i valori ai lati dell'operatore di confronto. 0 è già un numero, mentre null non lo è. Per cui la conversione implicita effettuata dal linguaggio sarebbe:

Number(null) // che dà come risultato 0

Per questo motivo possiamo riscrivere le operazioni come 0 > 0 e 0 < 0. Va da sé che il risultato è in entrambi i casi false mentre, di conseguenza, è true nel caso di 0 >= 0 e 0<= 0. Ecco spiegato il motivo dell’apparente incongruenza.

Rimane tuttavia il dubbio del perché l’operatore di uguaglianza tra null e 0 risponda false.

In effetti può trarre in inganno, ma anche qui c’è una spiegazione. Infatti, la logica non è la stessa appena vista con gli operatori di confronto, ovvero non viene effettuata una conversione implicita, quindi non abbiamo 0 == 0 che, a tutti gli effetti, restituirebbe true. Questo perché con l’operatore di uguaglianza le specifiche sono diverse. Nel caso in questione, non rispettando alcuna casistica particolare tra quelle definite, non viene effettuata alcuna conversione automatica in numero, per cui null rimane tale, e quindi, non è uguale a 0. L'operazione restituisce false.

Sull'operatore di uguaglianza trovi nel mio canale un MEME dedicato molto interessante per il quale ti lascio il link in sovraimpressione: https://www.youtube.com/watch?v=InrK5jLI95w&t=60s

Spero che questo video ti sia piaciuto, fammelo sapere nei commenti e non peritarti a scrivere se hai altre curiosità del JavaScript che vorresti approfondire. Ti invito anche iscriverti al mio canale se ancora non l'hai fatto e ci vediamo al prossimo MEME, ciao ;)

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

scrivi un commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web