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
esString
-
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).