La implementación de Storage de Firefox solo puede almacenar cadenas, pero en septiembre de 2009 , W3C modificó el borrador para aceptar cualquier dato.La implementación (todavía) no se ha puesto al día todavía( ver Editar a continuación ).
Entonces, en su caso, el booleano se convierte en una cadena.
En cuanto a por qué "true" != true, como está escrito en la descripción de Equal ( ==) en MDC *:
Si los dos operandos no son del mismo tipo, JavaScript convierte los operandos y luego aplica una comparación estricta. Si alguno de los operandos es un número o un booleano, los operandos se convierten en números si es posible; de lo contrario, si alguno de los operandos es una cadena, el otro operando se convierte en una cadena si es posible.
Tenga en cuenta que la cadena se convierte en un número en lugar de un booleano . Dado que "true"convertido a un número es NaN, no será igual a nada, por lo que falsese devuelve.
(*: Para conocer el estándar actual, consulte ECMA-262 §11.9.3 “El algoritmo de comparación de igualdad abstracta”)
Editar: La setIteminterfaz se revirtió para aceptar cadenas solo en el borrador del 1 de septiembre de 2011 para que coincida con el comportamiento de las implementaciones existentes, ya que ninguno de los proveedores está interesado en admitir el almacenamiento de cadenas que no sean cadenas. Consulte https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 para obtener más detalles.