JavaScript eval() 语法

标签 javascript string eval string-matching

我有一个旧脚本,用于通过向正文标记添加类名称来更改网站的字体大小,其部分功能是在将其更改为其他设置之一之前删除现有的类。问题是有一个 eval 行从 body 标记上的其他类中删除了单词“large”、“medium”或“small”的任何实例,这些类充当页面的唯一标识符,干扰我正在使用的其他脚本。如何更改以下代码中的 eval 行,使其仅匹配整个单词?

/* Override CSS with global font size selected by user */
function changeFontSize(size) {
var oldClasses, currentClass;

/*sets key words to be eliminated*/
oldClasses = eval("/large|medium|small/ig");

/*gets the current class names*/
currentClass = document.body.className;

/*eliminates key words from string, then adds new size*/
document.body.className = currentClass.replace(oldClasses, "") + " " + size;
}

最佳答案

没有充分的理由在这里使用eval(...)操作。就像这里提到的许多人一样,eval 是不好的做法。

在这里阅读更多相关信息: what does eval do and why its evil?

执行eval("/large|medium|small/ig")varpattern =/large|medium|small/ig/相同。前者会评估 string 来弄清楚该表达式的含义,然后再将其派生为正则表达式文字。虽然后者是一个直接的声明,但本质上它更有效,因为您跳过了评估步骤。

由于字体模式是静态的(不会改变),因此最好将其声明为正则表达式对象并继续使用它。

示例:

var FONT_SIZE_NAMES_PATTERN = new RegExp(/\b(large|medium|small)\b/ig);

function changeFontSize(size) {
    var oldClasses, currentClass;

    /*gets the current class names*/
    currentClass = "large";

    /*eliminates key words from string, then adds new size*/
    // document.body.className = currentClass.replace(FONT_SIZE_NAMES_PATTERN, "") + " " + size;
    console.log("New class name = " + currentClass.replace(FONT_SIZE_NAMES_PATTERN, "") + " " + size);
}

changeFontSize("VERY LARGE");

关于JavaScript eval() 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202382/

相关文章:

javascript - Jquery显示更多的div和显示更少的div

javascript - 格式化 PHP 和 Javascript 时钟

c# - 在部分限制器/短语之间获取文本

r - 在字符串上使用 eval() 来访问 R 中的对象属性

PHP如何将eval(0分配给变量

JavaScript div .hide 函数

javascript - 从 html 中删除完整的 href 链接标签

C++ 构造函数不会传递字符串 - 未定义构造函数

c - strtok() 如何在 C 中将字符串拆分为标记?

perl - 如何在 perl 中测试异常类型?