A implementação de armazenamento do Firefox só pode armazenar strings, mas em setembro de 2009 , o W3C modificou o rascunho para aceitar quaisquer dados.A implementação (ainda) ainda não foi atualizada( veja Editar abaixo ).
Portanto, no seu caso, o booleano é convertido em uma string.
Quanto ao motivo "true" != true, conforme escrito na descrição de Equal ( ==) no MDC *:
Se os dois operandos não forem do mesmo tipo, o JavaScript converte os operandos e aplica a comparação estrita. Se o operando for um número ou booleano, os operandos serão convertidos em números, se possível; senão, se qualquer operando for uma string, o outro operando será convertido em uma string, se possível.
Observe que a string é convertida em um número em vez de um booleano . Como "true"convertido em um número é NaN, ele não será igual a nada, então falseé retornado.
(*: Para o padrão real, consulte ECMA-262 §11.9.3 "O algoritmo de comparação de igualdade abstrata")
Editar: A setIteminterface foi revertida para aceitar strings apenas no rascunho de 1º de setembro de 2011 para corresponder ao comportamento das implementações existentes, pois nenhum dos fornecedores está interessado em oferecer suporte ao armazenamento de não strings. Consulte https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 para obter detalhes.