我有一个json文件,我正在渲染模板,并有一个像这样的对象
"templateLabelEval":"return $row->['document_code'];"
我正在使用渲染标签
eval(templateLabelEval);
有没有其他替代方法,我可以避免使用eval,因为它被认为是一种不好的做法
鉴于代码字符串有一个return
语句,单独的eval
无论如何都不会工作,但你可以使用Function()
。
var result = Function(data.templateLabelEval)();
这有几乎所有相同的安全问题,但与eval已经(或曾经)的性能问题不同。当然,您应该只执行安全的代码。
为了解释代码,将字符串传递给Function
构造函数会创建一个新的函数对象,并将该字符串作为其主体。 (我假设函数现在不需要定义参数。)因此尾随的()
立即调用函数,结果存储在result
中。
如果需要,可以存储函数本身,然后根据需要多次调用它。