Допустим, я хочу добавить переменную интерполяцию в строку следующим образом:
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()
.