Le problème ici, qui déroute beaucoup de programmeurs, est que les définitions de ce type ne sont pas normalisées quelque part. Le terme langage de programmation non typé est ambiguë. Est-ce que cela fait référence à une langue qui n'a pas types de données ou un langage qui est un lambda calculus variante non typée ?
JavaScript a un système de type et tous les domaines de ses fonctions accepteront tout var
variable. Cela signifie donc que JavaScript a un seul type de données, en réalité. C'est une question d'implémentation qui est plus importante pour les programmeurs JavaScript très avancés. Le programmeur JavaScript moyen ne s'intéresse qu'à l'élément abstrait mis en œuvre par l'intermédiaire de la var
qui ont été spécifiées par l'ECMAScript.
Dans le contexte du programmeur quotidien, et non du chercheur, le terme non typée est un terme mal choisi car la plupart des gens ne font pas de calcul lambda. Ainsi, le terme confond les masses et semble déclarer que JavaScript n'a pas de types de données, ce qui n'est tout simplement pas vrai. Quiconque a déjà utilisé typeof
sait que les variables JavaScript mettent en œuvre leurs propres types de données abstraites :
var test = "this is text";
typeof(test);
donne
"string"
ECMAScript définit les types suivants pour le langage : undefined
, null
, string
, boolean
, number
, object
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Une désignation plus précise pour JavaScript serait implicitement typée, dynamiquement typée, ou faiblement/loosely typée (ou une combinaison de celles-ci), dans la mesure où JavaScript utilise type coercition dans certains cas, ce qui rend le type implicite car vous n'avez pas à spécifier explicitement le type de vos variables. Il est classé dans la catégorie des langages faiblement typés car, contrairement à certains langages qui font la distinction entre les flottants et les entiers, etc. number
pour englober tous les nombres, et fait usage de la coercition de type mentionnée précédemment [Section 9 de la spécification ECMAScript].](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf) En revanche, un langage fortement typé aurait des types de données très spécifiques (c'est-à-dire que vous devriez spécifier int
ou float
).
Les définitions des langages à typage statique et dynamique ne sont pas normalisées, mais elles font le plus souvent référence à la présence de certaines caractéristiques du langage. L'une d'entre elles est Vérification de type au moment de l'exécution ou ce que l'on appelle contrôle de type dynamique . Si vous avez utilisé JavaScript, vous savez déjà qu'il attend définitivement le moment de l'exécution pour vérifier les types, c'est pourquoi vous obtenez TypeError
exceptions pendant l'exécution de votre code. Exemple ici