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
では空の配列だったものが、後では空ではなくなっている。
プロパティにアタッチ(?)したとき初めてセットされているかのような挙動であるが、hasOwnProperty
はtrue
を返している。ちょっとJSでは説明の付かない挙動だねえ。