Возможно ли в Javascript определить, является ли определенная строка зарезервированным ключевым словом языка, например switch
, if
, function
и т.д.?
То, что я хотел бы сделать, - это экранирование зарезервированных идентификаторов в динамически сгенерированном коде способом, который не разбивается на расширения для браузера.
Единственная мысль, которая приходит мне в голову, заключается в использовании eval
в блоке try-catch и проверке синтаксической ошибки. Не знаю, как это сделать. Любые идеи?
Определите, является ли слово зарезервированным идентификатором Javascript
Ответ 1
Один из вариантов:
var reservedWord = false;
try {
eval('var ' + wordToCheck + ' = 1');
} catch {
reservedWord = true;
}
Единственная проблема заключается в том, что это приведет к ложному срабатыванию для слов, которые являются недопустимыми именами переменных, но не зарезервированными словами.
Как указано в комментариях, это может представлять угрозу безопасности.
Ответ 2
Я думаю, вы могли бы решить это с помощью eval, но это похоже на хак. Я хотел бы просто проверить все зарезервированные слова. Что-то вроде этого:
var reservedWords = [
'break',
'case',
...
];
function isReservedWord(str) {
return !!~reservedWords.indexOf(str);
}
Вот список всех зарезервированных слов: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words
Кроме того, проблема с eval-подхода заключается в том, что некоторые браузеры иногда позволяют использовать некоторые зарезервированные слова в качестве идентификаторов.