Возможно ли в Javascript определить, является ли определенная строка зарезервированным ключевым словом, например switch
, if
, function
и т. Д.? Что я хотел бы сделать, так это экранирование зарезервированных идентификаторов в динамически сгенерированном коде способом, который не разбивается на расширения для браузера. Единственная мысль, которая приходит мне в голову, заключается в использовании eval
в блоке try-catch и проверки синтаксической ошибки. Не знаю, как это сделать. Есть идеи?Определить, является ли слово зарезервированным идентификатором Javascript
ответ
Одним из вариантов было бы сделать:
var reservedWord = false;
try {
eval('var ' + wordToCheck + ' = 1');
} catch {
reservedWord = true;
}
Единственная проблема будет, что это даст ложные положительные слова, которые являются недопустимыми именами переменных, но не зарезервированные слова.
Как указано в комментариях, это может представлять угрозу безопасности.
Это потенциальное целое для безопасности. – SLaks
Это хороший момент, но в зависимости от контекста это может быть не проблема. Я думаю, что решение просто получить полный список лучше, но ОП спросил, как вы это сделаете, поэтому я понял, что я бы ответил. – Jonah
вы также можете получить ложные негативы, так как некоторые браузеры позволяют использовать некоторые ключевые слова в качестве имен переменных. – Reason
Я думаю, вы могли бы решить это с помощью eval, но это похоже на взлома. Я хотел бы просто проверить все зарезервированные слова. Что-то вроде этого:
var reservedWords = [
'break',
'case',
...
];
function isReservedWord(str) {
return !!~reservedWords.indexOf(str);
}
Вот список всех зарезервированных слов: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words
Кроме того, проблема с Eval-подхода состоит в том, что некоторые браузеры иногда позволяет использовать несколько зарезервированных слов в качестве идентификаторов.
Нет необходимости в этом объекте. Массив должен делать, если значение существует в массиве, тогда это зарезервированное слово. 'return !! ~ reservedWords.indexOf (str);' – elclanrs
Хорошая точка, обновленный ответ. – Reason
Почему бы просто не вернуть returnWords.indexOf (str)> -1; '? – jbabey
- 1. Определить, является ли слово зарезервированным словом в Apache Derby
- 2. Является ли «стиль» зарезервированным словом в javascript?
- 3. Является ли аккредитация зарезервированным словом?
- 4. Как определить, является ли строка идентификатором пользователя?
- 5. Является ли 'err' зарезервированным словом для ошибки?
- 6. Является ли двигатель зарезервированным словом в Rails?
- 7. Является ли термин «дескриптор» зарезервированным в PHP?
- 8. Является ли «имя» зарезервированным словом в Rails?
- 9. Является ли wsh зарезервированным словом в VBScript?
- 10. Является ли NS_SWIFT_NAME зарезервированным для методов Factory?
- 11. DocumentDb -> Является ли индекс зарезервированным словом?
- 12. Является ли имя Application зарезервированным в Rails?
- 13. Является ли «позиция» зарезервированным словом в C++?
- 14. В Grails, является ли «собственность» зарезервированным словом?
- 15. Является ли «медиа» зарезервированным ключевым словом в браузере браузера Android?
- 16. Javascript: как определить, выделено ли слово
- 17. Является ли `_ [....]` действительным идентификатором?
- 18. Как проверить, является ли слово зарезервированным ключевым словом в Sybase (не может использоваться как имя столбца)?
- 19. Является ли «тест» зарезервированным словом в Rails 3?
- 20. Переименовать столбец, который является зарезервированным словом
- 21. Является ли строка со значением «Ошибка» каким-то зарезервированным словом?
- 22. JavaScript - определить, является ли математическая функция бесконечной
- 23. Как определить, является ли объект Javascript событием?
- 24. Как определить, является ли слово в строке двойным словом?
- 25. Является ли x зарезервированным ключевым словом в Javascript FF/Safari не в IE?
- 26. Является ли «сообщение» зарезервированным словом в Django или Python?
- 27. Является ли «тип» и «статус» зарезервированным словом в MySQL?
- 28. Является ли ключ tid зарезервированным с помощью JSON
- 29. Как проверить, является ли команда зарезервированным словом оболочки?
- 30. Является ли это «javax» незаконным (зарезервированным) именем пакета или нет?
Я бы просто пошел [здесь] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words), захватить все зарезервированные слова, положить их в массив и проверить строку. – elclanrs
В чем смысл этого вопроса? Вы динамически создаете имена переменных или просто хотите убедиться, что при кодировании вы случайно не используете зарезервированное слово (в этом случае, используя IDE или что-то вроде Notepad ++). Или используйте jsLint для проверки этого stff. –