IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

JavaScript で予約語を変数名にする方法

普通にグローバル変数ならできるのだが。

window['for'] = 'a';

これだと、ローカル変数ではできないので、こうする。

昨日のエントリに書いたように、ユニコードエスケープを使う。

function func() {
    var \u0074\u0068\u0069\u0073 /* this */ = 'a';
    alert(this); // 予約語
    alert(\u0074\u0068\u0069\u0073); // 変数
}

使い道は・・・

あまり思いつかない。
でも、コード自動生成するときに、変数名が予約語とかぶらないようにしたりとかできそう

JavaScript の字句の解析エンジンを作りました

サンプルの使いかた

例えば textarea に

var hoge = 3e3;

と書くと

No Type Operation Atom Dval
1VARDEFVAR
2NAMENAMEhoge
3ASSIGNNOP
4NUMBER3000
5SEMI
と表示される

ソースの使いかた

  • character.jsを読み込む
  • tokenizer.jsを読み込む
  • new TokenStream(source)
  • instance.getToken();
var tokenStream = new TokenStream('// ここにJavaScriptのソースを入れる');
var token
while((token = tokenStream.getToken()).type == 'EOF') {
    // token をごにょごにょする
}

ダメな点

  • Unicode Escape なシンボルには対応していない
  • シャープ変数には対応していない
  • ちゃんとエラー書いてない
  • 文字列中の \u \x \000〜 に未対応

今後の展望

次は構文ツリーを作るところを作りたい。