Esta pregunta es sobre semántica
Si te doy estos datos: 12
¿cuál es su tipo? No tienes forma de saberlo con certeza. Podría ser un entero, podría ser un flotador, podría ser una cadena. En ese sentido, son datos muy "sin tipo".
Si le doy un lenguaje imaginario que le permite usar operadores como "sumar", "restar" y "concatenar" en estos datos y alguna otra pieza arbitraria de datos, el "tipo" es algo irrelevante (para mi lenguaje imaginario) (ejemplo : quizás add(12, a)
rinde 109
cuál es 12
más el valor ascii de a
).
Hablemos C por un segundo. C prácticamente te permite hacer lo que quieras con cualquier dato arbitrario. Si está utilizando una función que requiere dos uint
s, puede emitir y pasar lo que desee, y los valores simplemente se interpretarán como uint
s. En ese sentido, C no está "tipificado" (si lo trata de esa manera).
Sin embargo, y llegando al punto de Brendan, si te digo que "Mi edad es 12
", entonces 12
tiene un tipo, al menos sabemos que es numérico. Con contexto, todo tiene un tipo, independientemente del idioma.
Es por eso que dije al principio: su pregunta es semántica. ¿Cuál es el significado de "sin tipo"? Creo que Brendan dio en el clavo cuando dijo "no hay tipos estáticos", porque eso es todo lo que puede significar. Los humanos naturalmente clasifican las cosas en tipos. Intuitivamente sabemos que hay algo fundamentalmente diferente entre un auto y un mono, sin que se nos enseñe a hacer esas distinciones.
Volviendo a mi ejemplo al principio: un lenguaje que "no se preocupa por los tipos" (per-se) puede permitirle "agregar" una "edad" y un "nombre" sin producir un error de sintaxis ... pero eso no significa que sea una operación lógicamente sólida.
Javascript puede permitirte hacer todo tipo de locuras sin considerarlas "errores". Eso no significa que lo que estás haciendo sea lógicamente correcto. Eso es para que el desarrollador lo resuelva.
¿Es un sistema / lenguaje que no exige la seguridad de tipos en tiempo de compilación / construcción / interpretación "sin tipo" o "con tipo dinámico"?
Semántica.
EDITAR
Quería agregar algo aquí porque algunas personas parecen estar atrapadas en "sí, pero Javascript tiene algunos" tipos "".
En mi comentario sobre la respuesta de otra persona, dije:
En Javascript podría tener objetos que he creado para ser "Monos" y objetos que he creado para ser "Humanos" y algunas funciones podrían diseñarse para operar solo en "Humanos", otras solo en "Monos", y y otros solo en "Cosas con armas". Si alguna vez se le ha dicho al idioma que existe una categoría de objetos como "cosas con brazos" es tan irrelevante para el ensamblaje ("sin tipo") como para Javascript ("dinámico"). Todo es una cuestión de integridad lógica, y el único error sería usar algo que no tuviera armas con ese método.
Entonces, si considera que Javascript tiene alguna "noción de tipos" internamente y, por lo tanto, "tipos dinámicos", y piensa que de alguna manera es "claramente diferente de un sistema sin tipo", debería ver en el ejemplo anterior que cualquier "noción de tipos "que tiene internamente es realmente irrelevante.
Para realizar la misma operación con C #, por ejemplo, NECESITO una interfaz llamada ICreatureWithArms
o algo similar. No es así en Javascript, no es así en C o ASM.
Claramente, si Javascript tiene alguna comprensión de los "tipos" es irrelevante.