Впровадження Firefox Storage може зберігати лише рядки, але на вересень 2009 року W3C змінив проект, щоб прийняти будь-які дані.Реалізація (досі) ще не наздогнала( див. Редагувати нижче ).
Тож у вашому випадку булевий перетворюється на рядок.
Щодо того "true" != true, як написано в описі рівняння ( ==) в MDC *:
Якщо два операнди не одного типу, JavaScript перетворює операнди, то застосовується суворе порівняння. Якщо будь-який операнд є числом або булевим, операнди перетворюються на числа, якщо це можливо; інакше, якщо будь-який операнд є рядком, інший операнд перетворюється на рядок, якщо це можливо.
Зауважте, що рядок перетворюється на число замість булевого . Оскільки "true"перетворене в число є NaN, воно не буде дорівнювати нічому, тому falseповертається.
(*: Для фактичного стандарту див. Пункт ECM-262 §11.9.3 "Алгоритм порівняння абстрактних рівностей")
Edit:setItem інтерфейс був повернувся приймати рядки тільки на вересень 1 - го проект 2011 року відповідно до поведінкою існуючих реалізацій, так як жоден з постачальників не зацікавлені в підтримці зберігаються не так-рядків. Детальніше дивіться на https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 .