Zusammenfassungen

Universitätsnotizen im Markdown-Format aus Obsidian.

JavaScript (JS) è il linguaggio di scripting fondamentale del Web. Nato nel 1996 in Netscape (chiamato inizialmente LiveScript), è oggi standardizzato come ECMAScript (ES).

Introduzione e Utilizzo

JavaScript è un linguaggio interpretato, dinamico e debolmente tipizzato. Sebbene sia nato per i browser (Client-Side), oggi gira ovunque (Server con Node.js, Database come CouchDB, App Desktop con Electron).

Vantaggi Lato Client

  • Performance: Riduce il carico sul server eseguendo calcoli sul dispositivo dell'utente.
  • Interattività: Risposta immediata agli eventi (click, input) senza ricaricare la pagina.

    Inserimento nella Pagina

    1. Esterno (Best Practice): File separato .js.
      <script src="script.js"></script>
    2. Embedded: Blocco script nell'HTML.
      <script>
      console.log("Ciao!");
      </script>
    3. Inline (Sconsigliato): Negli attributi HTML.
      <button onclick="alert('Click!')">Premi</button>

      Tipi di Dati e Variabili

      Tipi Primitivi

      JS ha 6 tipi di dati fondamentali:

    4. number: Interi e decimali (42, 3.14). Include valori speciali come NaN (Not a Number) e Infinity.
    5. string: Testo tra apici singoli o doppi ("Ciao", 'Mondo').
    6. boolean: true o false.
    7. undefined: Valore di una variabile dichiarata ma non inizializzata.
    8. null: Assenza intenzionale di valore (è un oggetto per un bug storico).
    9. symbol (Introdotto in ES6, per identificatori unici).

      Variabili e Scope

  • var: Scope di funzione (o globale). Soggetta a Hoisting (può essere usata prima della dichiarazione, risultando undefined).
  • let / const (ES6+): Scope di blocco ({}). const non può essere riassegnata.
    
    var x = 10;
    if (true) {
    var x = 20; // Modifica la x globale!
    }
    console.log(x); // 20

let y = 10; if (true) { let y = 20; // Nuova variabile locale al blocco } console.log(y); // 10


> [!WARNING] Hoisting
> Con `var`, le dichiarazioni vengono "spostate" in cima alla funzione.
> ```javascript
> console.log(a); // undefined (non errore!)
> var a = 5;
> ```
## Operatori e Uguaglianza
### Coercizione (Type Coercion)
JS cerca di convertire automaticamente i tipi.
```javascript
console.log(5 == "5");  // true (converte stringa in numero)
console.log(0 == false); // true
console.log("" == 0);    // true

Uguaglianza Stretta (===)

Confronta sia il valore che il tipo. Usare sempre questo.

console.log(5 === "5");  // false
console.log(0 === false); // false

Operatori Logici e Ternario

  • AND (&&): Ritorna il primo falso o l'ultimo valore.
  • OR (||): Ritorna il primo vero o l'ultimo valore.
  • Ternario (? :): condizione ? vero : falso.

    Oggetti

    Un oggetto è una collezione di coppie chiave-valore.

    
    // Object Literal
    var persona = {
    nome: "Mario",
    eta: 30,
    saluta: function() {
        return "Ciao sono " + this.nome;
    }
    };

// Accesso proprietà console.log(persona.nome); // Dot notation console.log(persona["eta"]); // Bracket notation (utile per chiavi dinamiche)

// Modifica dinamica persona.lavoro = "Developer"; // Aggiunge nuova proprietà delete persona.eta; // Rimuove proprietà

## Funzioni
Le funzioni sono "cittadini di prima classe" (possono essere passate come variabili).
### Dichiarazione
```javascript
function somma(a, b) {
    return a + b;
}

Funzione Anonima (Function Expression)

var quadrato = function(x) {
    return x * x;
};

Scope e Closure

Le funzioni interne "vedono" le variabili della funzione esterna.

function esterno(x) {
    return function interno(y) {
        return x + y; // 'x' è ricordata (Closure)
    };
}
var aggiungi5 = esterno(5);
console.log(aggiungi5(10)); // 15

Array

Liste ordinate di valori (anche misti).

var lista = ["mela", "pera", 42];

lista.push("banana"); // Aggiunge in fondo
lista.pop();          // Rimuove l'ultimo
lista.length;         // Lunghezza (3)

// Iterazione
for (var i = 0; i < lista.length; i++) {
    console.log(lista[i]);
}

Oggetti Globali Utili

  • Math: Math.random(), Math.floor(), Math.max().
  • Date: Gestione date (new Date()).
  • JSON: Parsing e serializzazione dati.
    var str = JSON.stringify({a: 1}); // '{"a":1}'
    var obj = JSON.parse(str);        // {a: 1}
  • Window: L'oggetto globale del browser (contiene document, alert, console).