JavaScript Void 0 förklaras på bara 5 minuter

JavaScript är ett mångsidigt skriptspråk som används flitigt både i gränssnittsutveckling (frontend) och serverutveckling (backend). Det ger möjlighet att skapa dynamiskt uppdaterat innehåll, animera bilder och hantera multimediaelement.

Med en stor mängd ramverk och bibliotek är JavaScript ett av de mest använda programmeringsspråken globalt, enligt statistik från Statista.

JavaScript erbjuder en variation av operatorer för olika ändamål. I den här artikeln kommer vi att undersöka operatorn `void(0)`, dess funktion, användningsområden, fördelar, potentiella säkerhetsrisker samt alternativa tillvägagångssätt.

Vad innebär `void(0)`-operatorn?

Termen ”void” betecknar i vanliga fall ”ogiltig” eller ”helt tom”. I JavaScript är `void(0)` en operator som utvärderar ett givet uttryck och returnerar värdet `undefined`. En funktion betraktas som ”void” om den inte returnerar något värde. Operatören `void(0)` har flera användningsområden.

Ett exempel är att med `void(0)` kan man få JavaScript att returnera `undefined` vid klick på en ankar-tagg. Detta medför att sidan inte laddas om och ingen omdirigering sker.

Varför är det relevant att använda `void`-operatorn med `0`?

Även om `void`-operatorn kan användas med vilket uttryck som helst, är det vanligt att använda den med `0` i JavaScript. Här följer några exempel på hur `void(0)` används:

Att förhindra navigering

Vanligtvis leder ett klick på en länk till en annan sida. För att visa detta, skapar vi ett exempel med två filer: `index.html` och `nextPage.html`.

Följande kod kan placeras i respektive fil:

index.html

<html lang="sv">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Startsida</title>
</head>
<body>
    <h2>Välkommen till startsidan</h2>
    <a href="nextPage.html">Gå till nästa sida (utan void)</a>
    <script src="script.js"></script>
</body>
</html>

nextPage.html

<html lang="sv">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nästa sida</title>
</head>
<body>
    <h2>Du befinner dig på nästa sida</h2>
    <a href="index.html">Gå tillbaka till startsidan (utan void)</a>
    <script src="script.js"></script>
</body>
</html>

Genom att klicka på länken navigerar du mellan ”Startsidan” och ”Nästa sida”.

Nu introducerar vi `void(0)` för att stoppa navigeringen. Lägg till följande kod i `index.html`:

<!-- Med void operator -->
<a href="javascript:void(0);" onclick="doSomething()">Klicka här</a>
<script>
  function doSomething() {
    alert("Knappen klickad, ingen navigering!");
  }
</script>

Vid klick på knappen ”Klicka här” visas en varning med meddelandet ”Knappen klickad, ingen navigering!”, men ingen ny sida laddas.

Självexekverande anonyma funktioner

En självexekverande anonym funktion (IIFE, Immediately Invoked Function Expression) är en funktion som definieras och körs direkt efter att den skapats. Detta skapar ett privat utrymme för variabler och minskar risken för att förorena det globala scopet.

Här är ett exempel:

void function() {
    // Funktion som beräknar summan av siffror 1 till n
    const calculateSum = () => {
        let sum = 0;
        for (let i = 1; i <= 10; i++) {
            sum += i;
        }
        return sum;
    };
    // Anropa funktionen och skriv ut resultatet
    const result = calculateSum();
    console.log("Summan av siffrorna 1 till 10 är:", result);
}();

Denna funktion summerar alla tal från 1 till 10 och visar resultatet. Utdata från ovanstående kod är: ”Summan av siffrorna 1 till 10 är: 55”.

Hur JavaScript och `void(0)` samverkar

Operatorn `void` är inte unik för JavaScript utan finns även i andra språk som C och C++. Men användningen av den varierar mellan språken. I C och C++ är `void` en datatyp, medan den i JavaScript är en operator.

I JavaScript används nyckelordet `void` tillsammans med talet `0`. Genom att använda `void()` kan du hindra webbläsarens standardbeteende, såsom att navigera till en ny URL. Ett typiskt exempel på kod som kombinerar JavaScript med `void()` ser ut så här:

<a href="javascript:void(0);" onclick="myFunction()">Klicka här</a>

Du kan även använda operatorn `void()` för att explicit returnera ett `undefined` värde. Här är ett exempel:

const result = void(0);

När denna kod körs, kommer `result` att vara `undefined`.

Fördelar med att använda `void(0)`

I JavaScript används `void()`-operatorn för att skapa ”void” eller ”undefined” värden. Här är några av fördelarna:

  • Förhindra navigering: `void(0)` kan användas i `href`-attributet för att hindra webbläsaren från att navigera till en ny sida vid klick på en länk eller knapp.
  • <a href="javascript:void(0);" onclick="myFunction();">Klicka här</a>
    
  • Returnera `undefined` värden: Utvecklare kan använda `void()` för att explicit returnera `undefined`, vilket kan vara användbart för att behålla kodkonsistens.
  • function myFunction() {
        // gör något
        return void(0);
    }
    
  • Undvik ”`undefined` tilldelning”: Du kan använda `void()` för att tilldela `undefined` till en variabel.
  • let result = void(0);
    
  • Öka kodens läsbarhet: När du explicit vill ignorera ett returvärde, kan `void()` göra koden tydligare för andra utvecklare.
  • function myFunction() {
        // gör något
        return void(0);
    }
    

Säkerhetsrisker med `void(0)`

Även om `void(0)` kan vara användbart, kan det också utgöra säkerhetsrisker om det används felaktigt. Här är några scenarier där `void(0)` kan missbrukas:

  • Sårbarheter för scriptinjektion: Om värdet som skickas till `void()` inte är sanerat eller validerat, kan det orsaka scriptinjektionsattacker. Detta är särskilt relevant när värdet genereras dynamiskt baserat på användarinmatning.
  • <a href="javascript:void(alert('Detta kan vara skadligt!'));">Klicka här</a>
    

    Ovanstående kod kan möjliggöra skadlig kodinjektion.

  • Clickjacking: Angripare kan utnyttja `void`-operatorn för att skapa transparenta lager ovanpå en webbsida och lura användare att klicka på dolda länkar eller knappar.
  • Kringgå Content Security Policy (CSP): CSP används ofta för att skydda mot cross-site scripting (XSS) attacker genom att begränsa vilka skript och resurser som en webbsida får ladda. `void()` kan dock kringgå denna skyddsmekanism genom att möjliggöra laddning av skript som CSP inte godkänner.

Alternativ till `void(0)`

Teknologin utvecklas ständigt och med den även programmering. Vissa anser att `void(0)` är en föråldrad teknik. Här är några av de alternativ som moderna utvecklare använder:

  • `event.preventDefault()`: Du kan använda `event.preventDefault()` för att förhindra en händelse från att inträffa, till exempel att förhindra navigering eller att ett formulär skickas.
  • Här är några exempel på hur du använder `event.preventDefault`:

    #html
    <a href="#" onclick="event.preventDefault()">Min länk</a>
    
    #JavaScript
    document.querySelector('a').addEventListener('click', event => event.preventDefault());
    
  • Använd `#` som `href`-värde: Att använda `#` i `href` säkerställer att användaren stannar kvar på samma sida. Du kan även använda `event.preventDefault()` samtidigt för att förhindra att sidan scrollar upp till toppen.
  • #html
    <a href="#">Min länk</a>
    
    #JavaScript
    document.querySelector('a').addEventListener('click', event => {
        event.preventDefault();
        window.scrollTo(0, 0);
    });
    
  • Använd `null`: Du kan returnera värdet `null` istället för `undefined`.
  • let result = null;
    

Vanliga frågor

Vad är JavaScript?

JavaScript är ett programmeringsspråk som främst används för frontend-utveckling, men även inom backend-utveckling med ramverk som Node.js. JavaScript kombineras ofta med HTML och CSS för att skapa interaktiva webbsidor.

Vad är JavaScript `void(0)`?

JavaScript `void(0)` är en operator som används för att stoppa standardbeteende. Till exempel kan `void(0)` användas för att förhindra navigering när en användare klickar på en länk eller knapp. När en länk med `void(0)` klickas, försöker webbläsaren navigera men utvärderar resultatet till `undefined`.

Finns det alternativ till `void(0)`?

Ja. Moderna utvecklare använder ofta eventlyssnare istället för `void(0)`. Detta gör det enklare att hantera olika funktioner och förhindra standardbeteende i kod.

Är det säkert att använda `void(0)`?

Du kan använda `void(0)` för att förhindra standardbeteende och i självexekverande funktioner. Men `void(0)` kan vara riskabelt om du inte använder det ansvarsfullt. Det kan till exempel möjliggöra injektion av skadlig kod om det används på data som kommer från användarinmatning.

Sammanfattning

JavaScript är ett omfattande programmeringsspråk och det kan ta tid att förstå alla dess koncept.

Vi har utforskat vad `void(0)`-operatorn är, dess betydelse, användningsområden, alternativ samt potentiella risker. Du har nu kunskapen att kombinera JavaScript med `void(0)` samt förstå de potentiella säkerhetsrisker som du kan stöta på när du använder den.
Du kan även undersöka olika JavaScript runtime environments för att förbättra din kodexekvering.