配列初期化時の挙動と「localStorageとXPCNativeWrapper」のその後
まず配列の方から。
配列の初期化で複数個の宣言をした時に挙動が思いがけないものだった。
以下が試したコード
var array = [,,,]; alert(array.length);
Safari,Opera,Firefox,Chromeは全て3でIEだけ4
挙動としてはIEの挙動であって欲しかった・・・・
次にlocalStorageとXPCNativeWrapperの方
MDCにあるXPCNativeWrapperの「XPCNativeWrapperは何をするのか」の説明にはこうある
XPCNativeWrapper は、ラップしたオブジェクトのメソッドとプロパティへのアクセスを制限します。XPCNativeWrapper を通した場合、そのプロパティとメソッドへのアクセスは、IDL で定義されているか、DOM レベル 0 で定義されているものに限定されます。(ただし、いくつかの DOM レベル 0 のプロパティとメソッドは、XPCNativeWrapper 上では動作しません) 特に、JavaScript によって、プロパティを追加した場合や、 __defineGetter__ と __defineSetter__ によって、getter と setter を定義した場合には、 そのオブジェクトに対する XPCNativeWrapper で公開されるようにはなりません。この制約によって、そのオブジェクトに対して IDL で定義されている安全なメソッドに確実にアクセスできるようにします。
XPCNativeWrapper は何をするのか
早速なのでIDLを探してみた
http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/storage/nsIDOMStorage.idl
IDLの中に
/** * The number of keys stored. */ readonly attribute unsigned long length;
とあるのでIDLに定義されていないわけでは無さそう。
その他の制限事項にも目を通してみたけどそれでも無さそうな感じ・・・
うーんやっぱりバグなのかな・・・