【问题标题】: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})`);});

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2020-06-18
      • 2015-05-29
      • 2023-03-26
      相关资源
      最近更新 更多