IEで「オブジェクトを指定してください」のエラー
エラーメッセージを言い換えると分かった。
「オブジェクトを指定してください」
「オブジェクトが指定されていないよ」
「オブジェクトが無いよ」
「オブジェクトがundefined
だよ」
原因
3通りあるようだ
原因1 古いIEと文字コード
IEの謎エラー対策(1) 「オブジェクトを指定して下さい」が外部ソースの場合 - 趣味の延長線 の通り、charsetを指定する。
原因2 関数が未定義
例
var hoge hoge(1) // "オブジェクトを指定してください。"
原因3 関数の後にセミコロン忘れ
(function(){})() (function(){})()
戻り値の無い関数はundefined
を返す。
分かりやすいようにfunction
をalert
に置き換えて整理すると、
(alert)() // =undefined (alert)()
そしてこうなる。
undefined(alert)()
この時、
undefined()
という式を実行しようとする。原因2と同じように、関数ではないものを実行しようとしているのでエラー。
余談、エラーメッセージについて
obj.propの形の関数だと少し分かりにくい。
Math.foo(1)
"オブジェクトは 'foo' プロパティまたはメソッドをサポートしていません。"
[Math.foo].map(function(e){ return e(1) })
"オブジェクトを指定してください。"
同じことなら、同じエラーメッセージにして欲しい。