localStorageとかsessionStorageとかのアレ
現状のlocalStorageとかsessionStorageは、valueとして文字列しかsetできない実装ばかりなので、アプリで使うならsetする時にJSON.stringifyして、getする時にJSON.parseするようなラッパーを書かないと無理とまでは言わないがめんどくさい。
また、
localStorage.key = "hoge"; localStorage[key] = "hoge"; localStorage.setItem(key, "hoge");
は、一応目的としては同じなのだが、setItemやgetItemはどうやらブラウザごとに挙動が微妙に異なるみたい。
例えば、手元のFirefox4.0.1では、setItem(null, "foo"); を実行してもnullをキーとして"foo"がsetされることはないが、setItem(undefined, "foo"); を実行するとundefinedをkeyとして、"foo"というvalueが格納されてしまう。
一方手元のChrome 11.0.696.14 devのlocalStorage.setItemは、nullもundefinedもkeyとしておいしく頂いてしまうようだ。
こういったsetItemやらgetItemの挙動に依存するコードを書いてはいけない。
また、
localStorage.setItem({}, "obj");
を実行すると、"[object Object]"という文字列をkeyとして、"obj"がvalueとして保存される。
これはFirefoxでもChromeでもtoStringを見ているようなので
function Hoge() { } Hoge.prototype.toString = function() { return "[homuhomu]"; }; var o = new Hoge(); localStorage.setItem(o, "obj");
とかすると、めでたく"[homuhomu]"をkeyとして"obj"が保存されることになる。
null, undefined, オブジェクトのいずれについてもユーザ側が期待するような動作ではないので、ラッパーでチェックして数字と文字列以外をkeyとして渡そうとしたらハネちゃった方がいい、とオモワレル(この辺のポリシーはどう決めるかの問題だけど)。