为了账号安全,请及时绑定邮箱和手机立即绑定

将字符串转换为模板字符串

将字符串转换为模板字符串

吃鸡游戏 2019-08-03 15:03:54
将字符串转换为模板字符串是否可以将模板字符串创建为通常的字符串?let a="b:${b}";然后将其转换为模板字符串。let b=10;console.log(a.template());//b:10无eval, new Function以及其他动态代码生成方法?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

因为模板字符串必须获得对b动态地(在运行时)变量,所以答案是:不,没有动态代码生成是不可能的。

但与eval很简单:

let tpl = eval('`'+a+'`');


查看完整回答
反对 回复 2019-08-05
?
HUH函数

TA贡献1836条经验 获得超4个赞

在我的项目中,我用ES6创建了这样的东西:


String.prototype.interpolate = function(params) {

  const names = Object.keys(params);

  const vals = Object.values(params);

  return new Function(...names, `return \`${this}\`;`)(...vals);

}


const template = 'Example text: ${text}';

const result = template.interpolate({

  text: 'Foo Boo'

});

console.log(result);

更新我已经删除了存放依赖项,ES6具有获取键和值的等效方法。




查看完整回答
反对 回复 2019-08-05
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

你在这里要求的是:

//non working code quoted from the questionlet b=10;console.log(a.template());//b:10

完全等同于(就权力和呃安全而言)eval*获取包含代码的字符串并执行该代码的能力;以及执行代码查看调用方环境中的局部变量的能力。

函数在js中无法查看调用方中的局部变量,除非该函数是eval()..平Function()做不到。


当您听说JavaScript中有一种叫做“模板字符串”的东西时,很自然地假设它是一个内置的模板库,比如胡子。不是,主要是字符串插值和用于JS的多行字符串。不过,我认为这在一段时间内将是一个普遍的误解。:(




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 558 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号