试图避免javascript eval()

时间:2012-03-16 21:20:30

标签: javascript variables eval

假设我想将变量插值添加到String中,如下所示:

String.prototype.interpolate = function() {
    return this.replace(/{(\S+?)}/g, function(match, $1) {return eval($1);});
}

如果我的所有变量都是全局变量或本地变量,那么我可以将eval($1)替换为this[$1]。但是,如果我有var name = {first: 'Joe', last: 'Blogs'};之类的内容,那么this[$1]将无法插入"Hello, {name.first} {name.last}!".interpolate()。有什么我可以用来代替eval()吗?如果我期望这些变量来自不受信任的来源,那么我真的不能使用eval()

1 个答案:

答案 0 :(得分:1)

如果您不想使用预先存在的模板引擎,我建议将数据显式插入:

String.prototype.interpolate = function(data) {
    return this.replace(/{(\S+?)}/g, function(match, $1) {return data[$1];});
}

console.log( '{a} is better than {b}'.interpolate({'a':'explicit', 'b':'implicit'}) );