Questa domanda è tutta sulla semantica
Se ti do questi dati: di 12
che tipo è? Non hai modo di saperlo con certezza. Potrebbe essere un numero intero - potrebbe essere un float - potrebbe essere una stringa. In questo senso sono molti dati "non tipizzati".
Se ti do un linguaggio immaginario che ti consente di usare operatori come "aggiungi", "sottrai" e "concatena" su questi dati e su alcuni altri dati arbitrari, il "tipo" è in qualche modo irrilevante (per il mio linguaggio immaginario) (esempio : forse add(12, a)
rese 109
che è 12
più il valore ASCII di a
).
Parliamo C per un secondo. C praticamente ti permette di fare quello che vuoi con qualsiasi dato arbitrario. Se stai usando una funzione che richiede due uint
s, puoi lanciare e passare tutto quello che vuoi, e i valori saranno semplicemente interpretati come uint
s. In questo senso C è "non tipizzato" (se lo trattate in questo modo).
Tuttavia - e arrivando al punto di Brendan - se ti dicessi che "La mia età è 12
" - allora 12
ha un tipo - almeno sappiamo che è numerico. Con il contesto tutto ha un tipo, indipendentemente dalla lingua.
Questo è il motivo per cui ho detto all'inizio: la tua domanda è di semantica. Qual è il significato di "non tipizzato"? Penso che Brendan abbia colpito l'unghia sulla testa quando ha detto "nessun tipo statico" - perché è tutto ciò che può significare. Gli umani classificano naturalmente le cose in tipi. Sappiamo intuitivamente che c'è qualcosa di fondamentalmente diverso tra un'auto e una scimmia - senza che ci venga mai insegnato a fare queste distinzioni.
Tornando al mio esempio all'inizio - un linguaggio che "non si preoccupa dei tipi" (di per sé) può consentire di "aggiungere" un "età" e un "nome" senza produrre un errore di sintassi ... ma che non significa che sia un'operazione logicamente sana.
Javascript può farti fare ogni sorta di cose folli senza considerarle "errori". Ciò non significa che ciò che stai facendo sia logicamente corretto. Questo è per lo sviluppatore di lavorare.
Un sistema / linguaggio che non impone la sicurezza dei tipi in fase di compilazione / costruzione / interpretazione è "non tipizzato" o "tipizzato dinamicamente"?
Semantica.
MODIFICARE
Volevo aggiungere qualcosa qui perché alcune persone sembrano essere coinvolte in "sì, ma Javascript ha alcuni" tipi "".
Nel mio commento sulla risposta di qualcun altro ho detto:
In Javascript potrei avere oggetti che ho costruito per essere "Scimmie" e oggetti che ho costruito per essere "Umani" e alcune funzioni potrebbero essere progettate per operare solo su "Umani", altre solo su "Scimmie", e altri ancora su "Things With Arms". Che il linguaggio sia mai stato detto o meno esiste una categoria di oggetti come "cose con le braccia" è irrilevante per l'assemblaggio ("non tipizzato") come lo è per Javascript ("dinamico"). È tutta una questione di integrità logica - e l'unico errore sarebbe usare qualcosa che non aveva armi con quel metodo.
Quindi, se si considera che JavaScript abbia internamente una "nozione di tipi" - e, quindi, "tipi dinamici" - e si pensa che questo sia in qualche modo "nettamente diverso da un sistema non tipizzato" - si dovrebbe vedere dall'esempio precedente che qualsiasi "nozione di tipi "che ha internamente è davvero irrilevante.
Per eseguire la stessa operazione con C #, ad esempio, HO BISOGNO di un'interfaccia chiamata ICreatureWithArms
o qualcosa di simile. Non così in Javascript - non così in C o ASM.
Chiaramente, indipendentemente dal fatto che Javascript abbia o meno una comprensione dei "tipi" è irrilevante.