【问题标题】:Strange js eval/template strings behaviour奇怪的 js eval/template 字符串行为
【发布时间】:2018-03-14 08:43:30
【问题描述】:
试图在stackoverflow中回答一个问题,我在我的chrome控制台中进行了一些测试,发现以下情况我无法理解。
var vals = ['x','y','z'];
vals.forEach(val => { eval(`var ${val} = 1; console.log('${val} = ', ${val})`);});
javascript 如何知道我何时将 ${val} 称为 "vals" 数组中定义的 val,以及何时我指的是它已将每个值存储在该数组中的值?
我的意思是,为什么它不记录:
x = x;
y = y;
z = z;
或
1 = 1;
1 = 1;
1 = 1;
【问题讨论】:
标签:
javascript
ecmascript-6
eval
template-strings
【解决方案1】:
模板字符串在您的eval 的上下文之外被评估首先。所以你已经有效地完成了:
eval("var x = 1; console.log('x = ', x)");
eval("var y = 1; console.log('y = ', y)");
eval("var z = 1; console.log('z = ', z)");
这当然只是打印每个变量及其值。
当像这样使用 eval 时,将其替换为 console.log 以查看实际发送到调用的字符串会很有用:
var vals = ['x','y','z'];
vals.forEach(val => { console.log('eval string:', `var ${val} = 1; console.log('${val} = ', ${val})`);});