什么是eval()

时间:2019-07-11 11:47:27

标签: javascript variables syntax eval

本文很明显,我们不应该使用eval()

https://24ways.org/2005/dont-be-eval

但是我没有实现建议的替代方法。

我正在做的一个简单版本:

var list = $('ul.plain-list li');
$('.search-filter button').each(function(){
    var d = $(this).data('filter');
    $(this).text(eval(d).length);
});

变量d的值与一组其他变量的名称匹配,例如list。我正在使用eval()来将这两件事结合起来,这非常有效,但是看来我不应该这样做。

在不使用eval()的情况下执行上述操作的正确方法是什么?

编辑:我不生成变量变量!看起来我可能正在使用数组或字典,但这似乎过于复杂,上面的代码运行得很好,而且非常轻巧。

Edit2:我当然很感谢答案,但是我在想的是,我对eval()的用法是如此具体,只是一段静态HTML中的单个字符串,以致本文中提到了安全性问题。不相关。这公平吗?

Edit3:恐怕仍在为此挣扎。这是我的确切代码,如果有人可以重写它,我将非常感激。

var all = $('ul.plainList li');
var stories = $('ul.plainList li:not(.type-sjn)');
var sjn = $('ul.plainList li.type-sjn');
$('.search-filter button').each(function(){
    var d = $(this).data('filter');
    $(this).find('span').text(eval(d).length);
});

如果不清楚,data-filter的值将与变量名allstoriessjn完全匹配。

代码执行的操作是获取不同类型帖子的计数,并将该计数插入与每种帖子类型相对应的按钮中。

0 个答案:

没有答案