SpiderMonkeyのErrorオブジェクト

FirefoxというかSpiderMonkeyがなんか変。

var e = new Error("hoge");
print("getOwnPropertyNames: " + Object.getOwnPropertyNames(e).toSource());
print(Object.getOwnPropertyDescriptor(e, "message").toSource());
print("message: " + e.hasOwnProperty("message"));
print("stack: " + e.hasOwnProperty("stack"));
print("getOwnPropertyNames: " + Object.getOwnPropertyNames(e).toSource());
print(Object.getOwnPropertyDescriptor(e, "message").toSource());

結果

getOwnPropertyNames: []
({configurable:true, enumerable:false, value:"hoge", writable:true})
message: true
stack: true
getOwnPropertyNames: ["message", "stack"]
({configurable:true, enumerable:false, value:"hoge", writable:true})

最初のObject.getOwnPropertyNamesでは空の配列だったものが、後では空ではなくなっている。

プロパティにアタッチ(?)したとき初めてセットされているかのような挙動であるが、hasOwnPropertytrueを返している。ちょっとJSでは説明の付かない挙動だねえ。