1

在 Javascript 中是否可以确定某个字符串是否是保留的语言关键字,例如switch, if,function等?我想做的是以一种不会破坏浏览器特定扩展的方式转义动态生成的代码中的保留标识符。我想到的唯一想法是eval在 try-catch 块中使用并检查语法错误。不知道该怎么做。有任何想法吗?

4

3 回答 3

6

一种选择是:

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

唯一的问题是,这将对无效变量名但不是保留字的单词产生误报。

正如评论中所指出的,这可能是一个安全风险。

于 2013-04-22T22:15:12.440 回答
1

我想你可以使用 eval 来解决它,但这似乎有点像 hack。我会去检查所有保留字。像这样的东西:

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 回答
1

strict仅供参考,某些单词仅在模式下引发错误

例如:包裹

eval('var package = 1') // No error
'use strict'
eval('var package = 1') // throws error

在此处输入图像描述

于 2021-12-29T13:06:19.930 回答