119 votes

Pourquoi fait «,,, » == Array(4) en Javascript ?

Au démarrage de votre interprète/console et essayer de la comparaison

> ",,," == Array(4)
True

Pourquoi? Au début, j'ai pensé que peut-être, car vous pourriez penser ",,," comme un tableau de quatre personnages avec un '\0' de résiliation de la tranche, qui explique peut-être pourquoi, mais

"..." == Array(4)

Renvoie La Valeur "False". Alors... pourquoi? Je sais que c'est une singulière peu de duck-typing en Javascript, mais juste curieux de ce souligne ce comportement. Glanée ce à partir de Zed Shaw l'excellente présentation ici btw: http://vimeo.com/43380467

Merci

178voto

Felix Kling Points 247451

Parce que la main droite opérande est converti en une chaîne de caractères et la représentation de chaîne d' Array(4) est ,,,:

> Array(4).toString()
  ",,,"

Si vous utilisez le tableau à la fonction constructeur et de passer un certain nombre, il définit la longueur du tableau à ce nombre. Donc on peut dire que vous avez quatre vide index (comme [,,,]) et de la chaîne par défaut de représentation de tableaux est une liste séparée par des virgules de ses éléments:

> ['a','b','c'].toString()
  "a,b,c"

Comment la comparaison est présentée dans la section 11.9.3 de la spécification. De là, vous verrez (x == y):

8. Si le Type(x) est une Chaîne ou un Nombre et le Type(y) est l'Objet,
retourner le résultat de la comparaison x == ToPrimitive(y).

(les tableaux sont des objets en JavaScript)

et si vous suivez l' ToPrimitive méthode finalement, vous trouverez qu'il appelle toString.

31voto

SomeKittens Points 13274

Essayez d'utiliser ===. Lors de l'utilisation d' == en Javascript, il va tenter de jeter les variables, conduisant ainsi à des questions comme celle-ci. La console est coulée Array(4) à la représentation de chaîne (c - Array(4).toString), qui est ",,,". La raison pour laquelle les virgules sont là, c'est que l' .toString() fonction ajoute à séparer des éléments dans un tableau. Voir ici pour une modifiables exemple.

31voto

Jason Kulatunga Points 3449

En interne, sa va

18voto

Keith Points 46288

C’est parce que s’initialise un tableau de 4 valeurs vides, un convertit implicitement, ainsi :

Sont toutes semblables.

conversions de type implicites en fait avant de comparer les valeurs, ce qui peuvent entraîner des résultats imprévisibles. Utilisation pour vérifier le type et la valeur.

5voto

Russell Borogove Points 8423

En comparant un tableau en une chaîne convertit le tableau en une chaîne avant d’effectuer la comparaison. Le fait de contraindre un tableau vide de 4 éléments en une chaîne donne cette chaîne exacte.

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