« Google Devfestに行ってきました | トップページ | emacs + flymake で Django »

2010年6月 8日 (火)

IE8でもJavaScriptの予約語を変数名とかに使えない

最近はほとんどTwitterでつぶやいているのでブログを更新していなかったんですが。
まあ備忘録とか長文についてはブログでつぶやこうと思いました。

久々にはまったこと。ちょっと簡単なAJAXなプログラムを開発しているシステムに追加していたんですが、Firefoxで動作するのにIE8で動かないという現象が発生。まあよくある「IEで動きません」だなあと思ってデバッグを繰り返すも何が原因かよくわからず時間を食ってしまった。

結局、原因は別の人が書いたJSONだった。
JSONデータの中に { ..... , class="....", .... } というデータがあって、 それを

var c = json_data.class;

として取得する部分がひっかかってた。

どうやらIEではJavaScriptの予約語の一部は変数やプロパティとして使えないらしい。こちらの記事がとても参考になった。

IEではJavaScriptコンパイルエラーが出力されてるんだけど「識別子がありません」というおなじみのわかりにくいエラーなので手間取った。結局JSONの人に頼んでclassを別の名前に変えてもらったら難なく動いた。とりあえず良し。

上のKawa.netさんの記事の表を見ると、予約語classはIEではN/AだけどFirefoxでは使える。これが混乱した原因か。ついでに他のブラウザを見てみるとSafari2.0が一番シビアに使えない。FirefoxとOperaがゆるい。Chrome6でアクセスしてみると、native, const, debugger以外の全てがavailableだった。かなりゆるい。

まあコンパイラの設計によってこのへんは変わってくるのだろう。どっちがいいのか悪いのかは論議がありそう。けどそれは置いといてクロスブラウザでJavaScriptを書くときには今後気をつけないといけないな。

|

« Google Devfestに行ってきました | トップページ | emacs + flymake で Django »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/125677/35139115

この記事へのトラックバック一覧です: IE8でもJavaScriptの予約語を変数名とかに使えない:

« Google Devfestに行ってきました | トップページ | emacs + flymake で Django »