---
name: verifica-tipo
description: Usare quando l'utente deve verificare e determinare il tipo di una variabile JavaScript.
---

# Verifica Tipo

Questa skill verifica e restituisce il tipo di una variabile JavaScript, con gestione speciale per array e null. Utile per debug e validazione dati, condizioni basate sul tipo, gestione dinamica dei tipi, sistemi di type checking.

## Procedura

1. **Verificare il tipo**: Usare `verificaTipo(valore)`
2. **Passare il valore**: Il parametro può essere di qualsiasi tipo
3. **Gestire il risultato**: Restituisce una stringa con il nome del tipo

## Regole

- Restituisce sempre una stringa con il nome del tipo
- Gestisce correttamente `null` (restituisce 'null', non 'object')
- Gestisce correttamente gli array (restituisce 'array', non 'object')
- Per altri valori, usa l'operatore `typeof` nativo
- Non lancia errori per nessun input

## Esempi

### Esempio 1: Verificare tipi primitivi

```javascript
console.log(verificaTipo(42));           // 'number'
console.log(verificaTipo('ciao'));       // 'string'
console.log(verificaTipo(true));        // 'boolean'
console.log(verificaTipo(undefined));   // 'undefined'
```

### Esempio 2: Verificare null e array

```javascript
console.log(verificaTipo(null));        // 'null' (non 'object')
console.log(verificaTipo([1, 2, 3]));    // 'array' (non 'object')
```

### Esempio 3: Verificare oggetti

```javascript
console.log(verificaTipo({}));           // 'object'
console.log(verificaTipo({ a: 1 }));     // 'object'
```

### Esempio 4: Verificare funzioni

```javascript
console.log(verificaTipo(function() {})); // 'function'
console.log(verificaTipo(() => {}));      // 'function'
```

### Esempio 5: Condizione basata sul tipo

```javascript
const valore = [1, 2, 3];
const tipo = verificaTipo(valore);

if (tipo === 'array') {
    console.log('È un array!');
} else if (tipo === 'object') {
    console.log('È un oggetto!');
} else {
    console.log(`È un ${tipo}`);
}
```

## Dettagli Aggiuntivi

- **Operatore typeof**: Restituisce il tipo di una variabile come stringa
- **Casi speciali**:
  - `typeof null` → 'object' (bug storico di JavaScript)
  - `typeof []` → 'object' (gli array sono oggetti)
  - `typeof NaN` → 'number'
- **Tipi JavaScript**:
  - Primitivi: 'number', 'string', 'boolean', 'undefined', 'symbol', 'bigint'
  - Oggetti: 'object', 'function'
  - Speciali: 'null' (gestito separatamente)
- **Efficienza**: O(1) - tempo costante
- **Esempi**:
  - verificaTipo(42) → 'number'
  - verificaTipo('ciao') → 'string'
  - verificaTipo([1, 2]) → 'array'
  - verificaTipo(null) → 'null'
  - verificaTipo({}) → 'object'
