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

MEME JavaScript #002... baNaNa

Spieghiamo il MEME JavaScript ('b' + 'a' + + 'a' + 'a').toLowerCase();

Questo MEME sul JavaScript gioca sull'effetto dell'operatore + che, quando usato tra stringhe di testo, le concatena, come abbiamo avuto modo di vedere dalla lezione sugli operatori nel mio corso sul JavaScript Semplificato per Google.

La domanda pertanto è:

- perché utilizzando questo operatore per concatenare il carattere "b" con una serie di caratteri "a", vengono aggiunte delle "n" ed il risultato è… banana?

function meme() {
  var result = ('b' + 'a' + + 'a' + 'a').toLowerCase();
  console.log(result); // banana
}

Sicuramente è facile intuire che la prima parte della parola è costituita dalla semplice concatenazione dei primi due caratteri, "b" + "a". Provando ad eseguire questa singola operazione il risultato è infatti "ba".

function esempio_1() {
  var result = 'b' + 'a';
  console.log(result); // ba
}

Ma dove sono le "n"? È proprio questo il gioco. Il secondo operatore di concatenazione concatena un altro operatore + con una "a". In questo caso, il secondo + non viene interpretato come concatenatore bensì come un operatore unario (in matematica, un'operazione unaria è un'operazione con un solo operando. Per esempio, la negazione logica è un'operazione unaria, -1, così come l'elevamento al quadrato o il fattoriale, n!):

function esempio_2() {
  var result = 'b' + 'a' + + 'a'; // (+ 'a') --> operazione unaria, come -1, 3^2 o 10!
  console.log(result); // baNaNa
}

Il simbolo + applicato al successivo testo, se non preceduto da una stringa, tenta di trasformarlo in un numero.
Se io applicassi il + ad una stringa con caratteri numerici, ad esempio + "22" otterrei come risultato 22 (non più di tipo stringa ma numero intero). Mentre, se applico il + ad un carattere come appunto la "a" tentando di trasformarlo in numero, ottengo in tutta risposta NaN (Not a Number), tradotto "Non un numero", proprio in virtù del fatto che sto trasformando in formato numerico un valore che non lo è.

function esempio_3() {
  var stringa = "22";
  var intero = +"22";
  var notanumber = +"a";
  console.log(stringa + " è di tipo " + typeof(stringa)); // string
  console.log(intero + " è di tipo " + typeof(intero)); // number
  console.log(notanumber + " è di tipo " + typeof(intero)); // number
}

Per rendere più intuitiva l’espressione, è come se la concatenazione fosse scritta in questo modo, con le parentesi all'operazione unaria:

function esempio_4() {
  var result = 'b' + 'a' + (+ 'a') + 'a';
  console.log(result); // baNaNa
}

Ed ecco dove saltano fuori le "n"...quindi "b"... "a"... "NaN"... "a".

Questo è permesso anche dal fatto che, quando si concatena una stringa con NaN, essendo quest'ultimo a tutti gli effetti un valore di tipo numerico, quando aggiunto alle stringhe, si concatena proprio come farebbe qualsiasi altro numero.

A rendere il tutto più omogeneo c'è infine il metodo toLowerCase() che applicato ad una stringa rende tutti i suoi caratteri minuscoli. Nel caso specifico le N di NaN.

console.log(('b' + 'a' + + 'a' + 'a'); // baNaNa
console.log(('b' + 'a' + + 'a' + 'a').toLowerCase()); // banana

Grazie a questo MEME abbiamo avuto l'occasione di approfondire alcuni tra i più importanti operatori ed il loro comportamento nel JavaScript quando utilizzati all'interno di un contesto di stringhe e numeri.

Spero che questo video ti sia piaciuto, fammelo sapere nei commenti e non peritarti a scrivere se hai altre curiosità sul 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