48 votes

Pourquoi new String('hello') === new String('hello') est-il évalué à False ?

Pourquoi l'instruction suivante renvoie-t-elle un résultat faux en JavaScript ?

new String('hello') === new String('hello')

59voto

Pointy Points 172438

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.

18voto

Brian Points 541

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')

12voto

BeyelerStudios Points 688

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 ?

8voto

ccorrin Points 207

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.

6voto

Cody Points 1198
typeof(new String()) === 'object';
==> true

(new Object()) === (new Object());
==> false

Toute structure "objet" dans l'espace " Tas "est unique ;

Pile et tas

Prograide.com

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.

Powered by:

X