変数からtemplate stringsを生成したい
ECMAScriptにおけるtagged templateを動的に生成する方法について教えて下さい。 template stringsは、一般的には、template literalsという呼称のとおり以下のコード例のようにリテラルとしてソースコード内に固定値として保持されるものですが、
var name = "user input here";
var str = `Hello, ${name}!`;
変数に格納された文字列をテンプレート文字列としてtagged template stringsとして利用したいと考えています。 この場合、evalやFunctionコンストラクタを使って文字列からコードを生成する以外にスマートな方法はないのでしょうか。
var name = "user input here";
var template = "Hello, ${name}";
var tagfunc = function(){ ... };
var str = eval( "tagfunc`" + template + "`" );
変数template
の内容が多言語化のために設定ファイルなどで指定されているといった状況を想定して下さい。
この場合、template
の内容そのものは開発者の支配下にあり実質的にevalされるコードは固定的な内容と等しいため、XSS等のセキュリティ上の心配はほぼないのですが、それでもContent-Security-Policyの導入などを考えると極力コード中のevalの使用は控えたいと思っています。