javascript:void(0), cos'è?

Foto di raffaele brivio

Che cos’è javascript:void(0)?

A volte capita di trovare nel codice di una pagina HTML una stringa come la seguente

<a href="javascript:void(0)">Cliccami</a>

Ma a cosa serve? In questo caso stiamo dicendo al browser che quando un utente cliccherà su quel link non dovrà accadere nulla.

A volte trovate anche questa forma

<a href="#">Cliccami</a>

Perfettamente lecita e valida ma con un piccolo rischio: lo scroll della pagina verso l’alto, verso il top della pagina.

Infatti solitamente possiamo usare link nella forma

<a href="#ancora-nella-pagina">Cliccami</a>

per far spostare lo scroll della pagina ad un elemento con id="ancora-nella-pagina".

Perchè usare JavaScript?

Se andate a leggere la documentazione ufficiale di void su MDN troverete che void valuta l’espressione che gli passiamo e poi ritorna undefined.

Un browser quando trova un URI dentro un link nella forma javascript: esegue il codice e poi rimpiazza il contenuto della pagina con il valore di ritorno, a meno che il codice o la funzione non ritornino undefined.

<a href="javascript:void(0);">Clicca qui per non fare nulla</a>

<a href="javascript:void(document.body.style.backgroundColor='green');">
  Clicca qui per uno sfondo verde della pagina
</a>

Utilizzi di void in JavaScript

Possiamo comunque utilizzare void per altri scopi, quelli per i quali è stato ideato.

Immaginate di aver scritto un event handler per un checkbox. Al click vogliamo che esegua una qualche operazione. Potremmo scrivere una cosa di questo tipo.

checkbox.onclick = () => eseguiOperazione();

Al click sulla checkbox viene eseguita la funzione e poi il chekcbox cambia stato.

MA

Se per caso la funzione in una situazione particolare ritorna ad esempio false il flusso di azioni si interrompe e il checkbox non cambia stato. Se è una cosa voluta non è un problema. Se però non è voluta e vogliamo evitarlo possiamo scrivere l’event handler in questa forma:

checkbox.onclick = () => void eseguiOperazione();

Questo fa in modo che se per caso qualcuno un domani cambia quella funzione in un modo non previsto verrà in ogni caso ignorato il valore di ritorno e non bloccheremo il comportamento di default del checkbox.

Un’altro modo di utilizzare void è quello di eseguire una funzione e scartare subito il valore di ritorno.

void function () {
  console.log("Boom!");
}();

Attenzione alle precedenze

void risolve le espressioni con una ben definita precedenza, alla quale è bene fare attenzione per evitare risultati non voluti. Considerate questi due esempi presi sempre da MDN

void 2 === "2"; 
void (2 === "2");

Quello che viene interpretato ed eseguito è quanto segue:

(void 2) === '2' // returns false
void (2 === '2') // returns undefined

Infatti viene eseguito il primo elemento appena dopo void. Nella prima riga il primo elemento è il numero 2. Nella seconda riga il primo elemento dopo void è il contenuto delle parentesi.

Funzioni eseguite e poi PUFF non ci sono più

Quando usate void la funzione o l’espressione in generale viene eseguita e viene ritornanto undefined. Attenzione che l’eventuale funzione che avete utilizzato non esiste più dopo l’esecuzione.

void function test() {
  console.log("test function executed");
};
try {
  test();
} catch (e) {
  console.log("test function is not defined");
  // output: "test function is not defined"
}

Buon coding! 😃