Tester l'existence d'une chaîne de caractères

Parent Previous Next



Tester l'existence d'une chaîne de caractères



Nous l'avons vu plus haut, l'instruction typeof est utile, mais la seule valeur de confiance qu'elle retourne est "undefined". En effet, lorsqu'une variable contient le type primitif d'une chaîne de caractères, typeofretourne bien la valeur "string", mais si la variable contient une instance de String alors on obtient en retour la valeur "object". Ce qui fait que typeof ne fonctionne que dans un cas sur deux, il nous faut donc une autre solution pour gérer le deuxième cas.


Et cette solution existe ! Il s'agit de la méthode valueOf() qui est héritée de Object. Cette méthode renvoie la valeur primitive de n'importe quel objet. Ainsi, si on crée une instance de String :

var string_1 = new String('Test');


et que l'on récupère le résultat de sa méthode valueOf() dans la variable string_2 :

var string_2 = string_1.valueOf();


alors l'instruction typeof montre bien que string_1 est une instance de String et que string_2 est une valeur primitive :

alert(typeof string_1); // Affiche : « object »

alert(typeof string_2); // Affiche : « string »


Grâce à cette méthode, il devient bien plus simple de vérifier si une variable contient une chaîne de caractères. Voici notre code final :

function isString(variable) {

    return typeof variable.valueOf() === 'string'; // Si le type de la valeur primitive est « string » alors on retourne « true »

}


D'accord, cette fonction va s'exécuter correctement si on envoie une instance de String. Mais que va renvoyer valueOf() si on passe une valeur primitive à notre fonction ?


Eh bien, tout simplement la même valeur. Expliquons-nous : valueOf() retourne la valeur primitive d'un objet, mais si cette méthode est utilisée sur une valeur qui est déjà de type primitif, alors elle va retourner la même valeur primitive, ce qui convient très bien vu que dans tous les cas il s'agit de la valeur primitive que nous souhaitons analyser !


Pour vous convaincre, testez donc par vous-mêmes :

alert(isString('Test')); // Affiche : « true »

alert(isString(new String('Test'))); // Affiche : « true »


Notre fonction marche dans les deux cas.  Alors, est-ce qu'en pratique vous aurez besoin d'une fonction pareille ? La réponse est : assez peu… Mais il est toujours bon de savoir comment s'en servir, non ?


Et enfin, à titre d'information, sachez qu'il est aussi possible d'obtenir une instanciation d'objet à partir d'un type primitif (autrement dit, on fait l'inverse de valueOf()), il suffit de procéder de cette manière :

var myString = Object('Mon texte');


Pour rappel, Object est l'objet dont tous les autres objets (tel que String) héritent. Ainsi, en créant une instance de Object avec un type primitif en paramètre, l'objet instancié sera de même type que la valeur primitive. En clair, si vous passez en paramètre un type primitif string alors vous obtiendrez une instance de l'objet String avec la même valeur passée en paramètre.


En résumé



Créé avec HelpNDoc Personal Edition: Création d'aide CHM, PDF, DOC et HTML d'une même source

Site à deux balles