假设我想要像这样在字符串中添加变量插值:
String.prototype.interpolate = function() {
return this.replace(/{(\S+?)}/g, function(match, $1) {return eval($1);});
}
如果我所有的变量都是全局或局部的,那么我可以用
this[$1]
替换eval($1)
。但是如果我有像var name = {first: 'Joe', last: 'Blogs'};
这样的东西,那么this[$1]
将无法插入"Hello, {name.first} {name.last}!".interpolate()
中。有没有什么东西可以代替eval()
?如果我希望这些变量来自不受信任的来源,那么我真的不能使用eval()
。