2017-08-15 92 views
2

假設我有一個像"${a + b}"這樣的字符串,比如說從JSON讀取,我想將其解釋爲ES6模板文本。我覺得這樣的事情可能工作:在ES6中將字符串轉換爲模板文字

var x = {"add": "${a + b}"}; 
var a = 10, b = 20; 
alert(`${x.add}`); 

但這提醒如${a + b},所以它只是做替代的一個水平。

試圖通過重新解釋它是聰明的:

var a = 10, b = 20; 
var x = {"add": "${a + b}"}; 
var i = `${x.add}`; 
alert(`${i}`); 

這仍然提醒如${a + b}

嘗試是更聰明:

var a = 10, b = 20; 
var x = {"add": "${a} + ${b}"}; 
var i = `${x.add}`; 
alert(`${i}`); 

此警報爲${a} + ${b}

從一個字符串開始,例如"${a + b}",有沒有什麼辦法讓這個評估完成,就好像它是一個模板文字?理想情況下沒有eval

+0

他們的模板*文字*,不是模板字符串。確實,如果你不使用標籤功能,他們最終會創建字符串(但如果你使用標籤功能,他們可能不會)。 –

+0

@ T.J.Crowder - 清理了一下。希望現在的措辭更好。 –

回答

2

是的,它們不是遞歸的。

如果你的出發點是包含這些佔位符,據我所知是沒有模板的編譯器功能。當然有eval; [插入所有關於使用eval   —僅限於您信任的內容的所有常見警告,而不是如果您可以避免它等等,請使用  —這裏]。

因此,例如:

"use strict"; 
 
var x = {"add": "${a + b}"}; 
 
var a = 10, b = 20; 
 
console.log(eval("`" + x.add + "`"));

+0

雖然我從字符串中得到它,例如,''$ {a + b}「',從JSON源讀取,所以沒有解決方案? –

+0

@YiminRong:如果你收到模板*作爲字符串*,我不知道任何模板編譯器的功能,沒有。當然,你可以使用'eval'(有關使用'eval'的所有常見注意事項)。 –