1

特定の文字列が、、、などswitchの予約済み言語キーワードであるかどうかを Javascript で判断することは可能ですか? 私がやりたいのは、動的に生成されたコードで予約済みの識別子を、ブラウザー固有の拡張機能で壊れないようにエスケープすることです。私の頭に浮かぶ唯一の考えは、try-catch ブロックで使用して構文エラーをチェックすることです。しかし、それを行う方法がわかりません。何か案は?iffunctioneval

4

3 に答える 3

6

1つのオプションは、次のことです。

var reservedWord = false;
try {
  eval('var ' + wordToCheck + ' = 1');
} catch {
  reservedWord = true;
}

唯一の問題は、無効な変数名であるが予約語ではない単語に対して誤検知が発生することです。

コメントで指摘されているように、これはセキュリティ上のリスクになる可能性があります。

于 2013-04-22T22:15:12.440 に答える
1

eval を使用して解決できると思いますが、それは一種のハックのようです。すべての予約語をチェックするだけです。このようなもの:

var reservedWords = [
    'break',
    'case',
    ...
];

function isReservedWord(str) {
    return !!~reservedWords.indexOf(str);
}

すべての予約語のリストは次のとおりです: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

また、eval アプローチの問題は、一部のブラウザでは予約語を識別子として使用できる場合があることです。

于 2013-04-22T22:17:25.027 に答える