27 votes

Est-il exact que JSON.stringify (2) == "2" peut retourner false?

J'ai trouvé que sur Opera 11.50 l'expression

 JSON.stringify(2)

retourne un objet pour lequel

  • typeof retours "string"
  • constructor.name est String
  • charCodeAt(0) est de 50
  • length est 1

Mais encore

alert(JSON.stringify(2) == "2")

affiche "false" dans l'Opéra (et la même chose arrive à l'aide de ===).

Est-ce un bug ou quoi?

Le seul moyen que j'ai trouvé pour le faire comparer égal à "2" appelle - .substr(0) (par exemple, même l'ajout d'une chaîne vide encore comparer les différentes).

7voto

Robin Winslow Points 2827

Qui ressemble fort à un bug.

À partir de l'ECMAScript 5.1 spécifications:

Conforme implémentations de JSON.analyser et JSON.stringify doit prendre en charge l'exacte interchange format décrit dans la présente spécification, sans suppressions ou des extensions du format. Cela diffère de la RFC 4627 qui permet de parser JSON à accepter la non-JSON formes et les extensions.

Et:

JSON.stringify crée une Chaîne de caractères qui est conforme aux JSON de la grammaire. JSON.analyser accepte une Chaîne de caractères qui est conforme à la grammaire JSON

Il se peut que de toute façon il enroule la chaîne dans un "JSONText" type d'objet qui a toujours un typeof de string mais qui semble très étrange.

Je crois vraiment que la suite de la mise en œuvre dans ce cas est le bon:

JSON.stringify(2) == "2" && JSON.stringify(2) === "2" && JSON.stringify(2) == 2 && JSON.stringify(2) !== 2;
true

Selon @6502 (voir le commentaire) c'est - true dans:
Chrome; Firefox; IE9; Safari iPad; OsX Safari; le N1 navigateur Android

L'ECMAScript 5.1 document de spécification: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

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