当前位置: 首页 > 面试题库 >

模板文字被困在字符串变量中

苗学民
2023-03-14
问题内容

我有一个模板Hello, ${user.name}存储在变量中。我正在使用读取来自外部文件的内容fs.read

现在,很明显,当我附加到目标div的innerHTML时,它按原样显示字符串,而不是按预期方式显示“ Hello,James”(假设user.name =
James)。
有办法实现吗?

extfile.txt =>
{"A":"Welcome, ${user.name}"}

Node.js代码=>

fs.readFile(__ dirname +'/extfile.txt','utf8',函数(err,data){
  如果(错误){
    返回console.log(err);
  }其他{
    让x = JSON.parse(data);
    socket.emit('var',xA);
  }
});

HTML =>

socket.on('var',function(x)){
  getElementById('target')。innerHTML = x;
}

问题答案:

我稍微重写了这里介绍的解决方案。

在此,eval_template评估作为常规字符串提供的ES6模板字符串。模板字符串中使用的局部作用域中的任何变量都必须作为在第二个参数中传递的对象的属性来提供(因为使用创建的函数Function在全局作用域中并且无法访问局部变量)。

危险地接近使用eval。您可能希望选择其他方法来处理模板字符串。ES6模板字符串被设计为一种运行时机制,用于创建字符串文字,而不是模板语言可以存储和重用的模板语言。

function eval_template(s, params) {

  return Function(...Object.keys(params), "return " + s)

    (...Object.values(params));

}



const template = "`Welcome, ${user.name}`";

console.log(eval_template(template, {user: {name: "James"}}));

只要将标记作为参数传递,就没有理由不能将其与带标记的模板字符串一起使用:

eval_template("tag`${boo}`", {tag, boo});


 类似资料:
  • 问题内容: 我有以下Ecma-Script-6代码 输出如下: 和 我已经能够在此处将字符串串联起来,那么使用模板文字的情形将是什么? 问题答案: 如果像问题示例中那样仅将模板文字与占位符(例如)一起使用,则结果与串联字符串相同。从主观上讲,它看起来更好并且更易于阅读,尤其是对于多行字符串或包含这两者的字符串,因为您不必再​​转义那些字符了。 可读性是一个很棒的功能,但是关于模板最有趣的是Tagg

  • 我想使用静态定义的模板来构建URL。 我正在尝试为此使用 ES6 字符串插值功能 预期结果:http://example.com/?name=John 实际结果:http://example.com/?name=${name} 如果这不能用字符串插值来实现,那么还有比<code>string.prototype更好的方法。替换like

  • 我试图让一个语句起作用,但由于某些原因,它不起作用。应该很简单。 假设字符串 我的代码是: 两种规格的结果都是1。

  • ES6引入了一种通过反引号( ` )标记的新的字符串文字类型。 这些字符串文字可以包括换行符,并且有一个新的机制用于将变量插入字符串:

  • 下面就是Array#pack、String#unpack中所用到的模板字符的一览表。模板字符后面可以跟上表示"长度"的数字。若使用'*'来取代"长度"的话, 则表示"剩下的所有字符"之意。 长度的定义因模板字符的不同而有所差异, 大体上像 "iiii" 这样的连续字符可以写成 "i4" 这个样子。 在下面的说明中, short和long分别表示长度为2和4字节的数值(也就是通常32位机器所指的

  • 问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单: