Pourquoi l'instruction suivante renvoie-t-elle un résultat faux en JavaScript ?
new String('hello') === new String('hello')
Pourquoi l'instruction suivante renvoie-t-elle un résultat faux en JavaScript ?
new String('hello') === new String('hello')
Deux cordes objets seront toujours inégales entre elles. Notez que JavaScript dispose d'une chaîne de caractères primitif ainsi qu'un constructeur de chaînes de caractères pour créer des objets enveloppants. Toutes les comparaisons d'égalité d'objets (en particulier avec ===
) sont effectuées pour tester l'existence d'un l'égalité de référence . Les références à deux objets différents ne seront bien sûr jamais égales entre elles.
Así que "hello" === "hello"
sera true
car il s'agit de primitives de chaînes de caractères.
Vous comparez des instances d'objets, ce qui n'est pas le cas d'une comparaison de chaînes de caractères ( 'hello' === 'hello'
) Comparer des objets en Javascript revient en fait à comparer les adresses mémoire des objets et renverra toujours un résultat faux car les adresses mémoire sont différentes pour chaque objet.
Comparer les valeurs des chaînes de caractères au lieu de l'instance de l'objet - jsFiddle
( String('hello') === String('hello') ) // returns true due to comparing strings
Comparaison stricte de deux objets - faux pas le même objet
new String('hello') === new String('hello')
Comparaison stricte de deux chaînes de caractères - vrai, même valeur retournée et même type retourné
String('hello') === String('hello')
Elle est évaluée à false parce que vous comparez deux objets différents : new créera un nouvel objet.
Article connexe : Qu'est-ce que le mot-clé "new" en JavaScript ?
Vous demandez à javascript de comparer deux instances différentes de la variable, et non la valeur de la chaîne qui se trouve à l'intérieur de la variable.
Par exemple, disons que j'ai un morceau de papier sur lequel est écrit le mot "Hello World" (Paper1) et que mon frère a un autre morceau de papier sur lequel est écrit le mot "Hello World" (Paper2).
Si vous dites "Papier 1 === Papier 2", vous obtiendrez un résultat faux, car il ne s'agit pas exactement du même morceau de papier, même si les mots écrits sur le papier sont les mêmes.
Si vous disiez Paper1.toString() === Paper2 .toString(), vous obtiendriez true, car nous comparons les mots écrits sur le papier, et non le papier lui-même.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.