Introduction
L’une des caractéristiques de langue javascript les plus controversées est sa typographie douce ou dynamique dont nous avons déjà parlé parfois. Cela signifie que, contrairement aux autres langues classiques telles que C ou Java, lorsque nous déclarons des variables, nous n’avons pas besoin de spécifier le type de données qu’ils contiendront. De plus, la même variable, peut posséder plusieurs types différents dans différents moments d’exécution: peut commencer à être une gamme, devenez une matrice puis, par exemple, finalement être un objet.
Cette flexibilité qu’il a Avantages très intéressants pour le développement d’applications complexes car il n’y a pas de limitations priories quant à la variable pouvant stocker. Cependant, pour ceux qui viennent d’autres langages pointillés, l’un des problèmes de ce concept est qu’il est très difficile d’identifier le type de données spécifique qu’une variable a à un moment donné de l’exécution.
Identification Le type
efficacement, JavaScript ne possède pas de moyen univocal pour identifier le type de données contenant une variable à un moment donné. Nativement, nous avons deux instructions qui peuvent nous donner une valeur approximative mais que, malheureusement, ne sont pas finales: typeof et instanceOf.
L’opérateur de typeOf
typeof est un opérateur UNAR, quoi ce qui signifie qu’il accepte seulement (et fonctionne) sur un seul argument; Dans ce cas une variable:
type de 2; // numptypeof ‘hello world’ // stringtypeof // objet pré>
Cet opérateur n’est pas une fonction; Cependant, des parenthèses peuvent être utilisées pour regrouper les termes à évaluer:
<6 cec4a2976 ">
typeof (2); // NUBERTYPEOF (‘Hello World’); // stringtypeof (‘foo’, 4); // Nombre
Remarque: Les groupements d’arguments en JavaScript déterminent la valeur finale d’un élément à l’aide d’opérateurs internes. Ces opérateurs indiquent l’ordre dans lequel les termes sont évalués, tels que la virgule, qui rend cette évaluation de gauche à droite pour renvoyer la valeur du deuxième opérande. Pour plus d’informations sur cet aspect linguistique, l’élément de la virgule JavaScript est recommandé.
Le tableau suivant indique la correspondance d’objets JavaScript et la valeur obtenue avec typef:
résultat | |
---|---|
non défini | « non défini » |
null | « objet » |
booléen | « booléen » |
numéro | « numéro » |
string | « string » |
objet hôte (dans le JS Environnement) | dépend de la mise en oeuvre |
fonction | |
objet xml e4x | « xml » |
xmllist e4x | « xml » |
Tout autre objet | « objet |
Comment pouvons-nous voir Il n’ya aucune référence dans le tableau avant d’éléments tels que des tableaux, des dates, des expressions régulières, etc. Cela signifie que pour le typeOf, ces éléments sont un objet de plus. De plus, nous voyons des résultats qui peuvent sembler déroutant comme NULL dans lequel nous obtenons un type de nouvel « objet »:
type de nan; // NUBERTYPEOFF INFINITY; // NUBERTYPEOF (1/0); // nucbertypeof (typef); // string pré>
Il semble que nous ne puissions pas trop faire confiance à cet opérateur pour déterminer le type de données que nous avons évaluées, il peut donc être intéressant de rechercher un autre plus sûr ou plus complet solution.
objet.pototype.string
La fonction de tostrage, renvoie une chaîne qui représente l’objet indiqué comme argument:
Laissez-nous voir le résultat: « »: Selon la spécification ECMAScript5, objet.pototype.string renvoie en conséquence la concaténation de la chaîne « objet » plus la Valeur interne de l’objet Ce qui est passé (ce que nous appelons classe de classe) …
]
Tous les objets JavaScript ont un propriétaire interne appelé] (la notation avec double fermoir est identique à celui utilisé dans la spécification ES5). Selon ES5,] est une chaîne avec une seule valeur (non modifitable) qui identifie chaque objet. Par conséquent, un objet invoqué avec le constructeur et qui n’a pas été modifié, revient comme valeur de cette propriété le type d’objet précis auquel il appartient:
var o = nouvel objet (); ou.piquer (); // pré>
Cependant, nous voyons que cet opérateur est également fragile lorsque nous l’appliquons sur des objets courants:
Ceci est ainsi parce que les objets personnalisés écrasent l’objet.Prototype.string méthode avec le vôtre. Un moyen de résoudre ce problème est d’invoquer cette méthode directement à partir de l’objet d’objet et d’utiliser la fonction d’appel pour injecter l’argument souhaité:
DIV = " 6 cec4a2976 ">