una puedo ley dinero devolucion consumidor compra arrepentir javascript opera

javascript - puedo - ley consumidor devolucion dinero



¿Es correcto que JSON.stringify(2)== “2” pueda devolver falso? (1)

Eso definitivamente parece un error.

De la especificación ECMAScript 5.1:

Las implementaciones conformes de JSON.parse y JSON.stringify deben admitir el formato de intercambio exacto descrito en esta especificación sin ninguna eliminación o extensión al formato. Esto difiere de RFC 4627, que permite que un analizador JSON acepte formularios y extensiones que no sean JSON.

Y:

JSON.stringify produce una cadena que se ajusta a la siguiente gramática JSON. JSON.parse acepta una cadena que se ajusta a la gramática JSON

Puede ser que de alguna manera envuelva la cadena en un objeto de tipo "JSONText" que todavía tenga un tipo de string pero que parezca muy extraño.

Definitivamente creo que la siguiente implementación en este caso es la correcta:

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

Según @ 6502 (ver comentario) esto es true en:
Cromo; Firefox; IE9; iPad Safari; OsX Safari; el navegador Android N1

El documento de especificación ECMAScript 5.1: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

He encontrado que en Opera 11.50 la expresión

JSON.stringify(2)

devuelve un objeto para el cual

  • typeof devuelve "string"
  • constructor.name es String
  • charCodeAt(0) es 50
  • length es 1

Pero aún

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

muestra "falso" en Opera (y lo mismo ocurre con === ).

¿Este es un problema o qué?

La única forma que encontré para hacer que se compare igual a "2" es llamando a .substr(0) (por ejemplo, incluso agregar una cadena vacía se compara con otra).