Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将字符串转换为模板字符串_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 如何将字符串转换为模板字符串

Javascript 如何将字符串转换为模板字符串,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,假设我有: var json = '{"greetings": "`${greetings}`"}'; var obj = JSON.parse(json); var template = obj.greetings; //`${greetings}` var greetings = 'hello'; 如何评估模板以获取hello?由于JSON.parse()将obj.greetings返回为字符串,因此可以使用eval()将字符串作为js运行

假设我有:

 var json = '{"greetings": "`${greetings}`"}';
 var obj = JSON.parse(json);
 var template = obj.greetings; //`${greetings}`

 var greetings = 'hello';
如何评估模板以获取hello?

由于
JSON.parse()
obj.greetings
返回为字符串,因此可以使用
eval()
将字符串作为js运行。所以只要:

var json = '{"greetings": "`${greetings}`"}';
var obj = JSON.parse(json);
var template = eval(obj.greetings); //`${greetings}`

var greetings = 'hello';
console.log(greetings)// hello
但使用
eval()
时应始终小心,因为字符串可能是通过用户输入输入的

编辑:

上面带有
eval
的代码返回
undefined
。 这是因为JavaScript不适用于初始化变量

因此,我们当然需要移动初始化
var问候语='hello'在顶部。
不带
eval()的解决方案

将模板字符串应用于整个字符串

var问候语='hello';
var json=`{“问候语”:“${问候语}”}`;
var obj=JSON.parse(JSON);
var模板=obj.greetings//`${问候}`
控制台日志(模板)//hello
由于
JSON.parse()
obj.greetings
返回为字符串,因此可以使用
eval()
将字符串作为js运行。所以只要:

var json = '{"greetings": "`${greetings}`"}';
var obj = JSON.parse(json);
var template = eval(obj.greetings); //`${greetings}`

var greetings = 'hello';
console.log(greetings)// hello
但使用
eval()
时应始终小心,因为字符串可能是通过用户输入输入的

编辑:

上面带有
eval
的代码返回
undefined
。 这是因为JavaScript不适用于初始化变量

因此,我们当然需要移动初始化
var问候语='hello'在顶部。
不带
eval()的解决方案

将模板字符串应用于整个字符串

var问候语='hello';
var json=`{“问候语”:“${问候语}”}`;
var obj=JSON.parse(JSON);
var模板=obj.greetings//`${问候}`


控制台日志(模板)//您好
您基本上是在尝试将模板文字添加到JSON格式,这不是一种有效的语法。您可以尝试
eval
eval(模板)
@kaveh,但
eval
不是一种非常糟糕的做法。@ThanveerShah这取决于情况。如果您信任json对象的源,那么就可以了。但是如果你不能控制它的内容,那么是的,它会破坏你的代码。不过,您可以使用正则表达式验证模板!基于这个问题,你基本上是在尝试将模板文字添加到JSON格式,这不是一种有效的语法。你可以尝试
eval
eval(template)
@kaveh,但
eval
不是一种非常糟糕的做法。@ThanveerShah这取决于具体情况。如果您信任json对象的源,那么就可以了。但是如果你不能控制它的内容,那么是的,它会破坏你的代码。不过,您可以使用正则表达式验证模板!基于代码中的问题,
模板
的值将不再是
${greetings}
,以后不能在代码中使用<必须对“模板”调用代码>求值
。请参阅我对这个问题的评论。
var greetings
将不会被值提升,请尝试在答案编辑器中将其放入堆栈片段(单击
)来运行它。整个字符串的反勾号是一个好主意,但如果json来自远程源代码,则值得注意的是不实用的。模板文本是在编译时解析的,因此在JSON.parse()运行之前,字符串中将包含“hello”<代码>模板
不会返回
${hellies}
它已经有值了
“hello”
@charlietfl是的,在这个简单的例子中它可以工作,但是在
var json
初始化之后和
json.parse()
之前再次更改
问候语时,它仍然会返回旧值。即使传递对象引用以便以后更新,也不会起作用,因为它最终会在解析后释放引用。在代码中,
template
的值不再是
${greetings}
,并且以后不能在代码中使用<必须对“模板”调用代码>求值
。请参阅我对这个问题的评论。
var greetings
将不会被值提升,请尝试在答案编辑器中将其放入堆栈片段(单击
)来运行它。整个字符串的反勾号是一个好主意,但如果json来自远程源代码,则值得注意的是不实用的。模板文本是在编译时解析的,因此在JSON.parse()运行之前,字符串中将包含“hello”<代码>模板不会返回
${hellies}
它已经有值了
“hello”
@charlietfl是的,在这个简单的例子中它可以工作,但是在
var json
初始化之后和
json.parse()
之前再次更改
问候语时,它仍然会返回旧值。即使传递对象引用以便稍后更新,也不会起作用,因为它最终会在解析后释放引用。