Implementasi Penyimpanan Firefox hanya dapat menyimpan string, tetapi pada September 2009 , W3C memodifikasi draf untuk menerima data apa pun.Implementasinya (masih) belum selesai( lihat Edit di bawah ).
Jadi dalam kasus Anda, boolean diubah menjadi string.
Adapun alasannya "true" != true, seperti yang tertulis pada uraian Equal ( ==) di MDC *:
Jika kedua operan tidak berjenis sama, JavaScript mengonversi operan tersebut lalu menerapkan perbandingan yang ketat. Jika salah satu operan adalah bilangan atau boolean, operan akan diubah menjadi bilangan jika memungkinkan; else jika salah satu operan adalah string, operan lainnya akan diubah menjadi string jika memungkinkan.
Perhatikan bahwa string diubah menjadi Angka, bukan Boolean . Karena "true"diubah menjadi angka NaN, itu tidak akan sama dengan apa pun, jadi falsedikembalikan.
(*: Untuk standar aktual, lihat ECMA-262 §11.9.3 "Algoritma Perbandingan Kesetaraan Abstrak")
Edit: The setItemantarmuka itu dikembalikan untuk menerima string hanya pada 2011 September 1 rancangan untuk mencocokkan perilaku implementasi yang ada, karena tidak ada vendor yang tertarik dalam mendukung menyimpan non-string. Lihat https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 untuk detailnya.