Interpolación de cadenas en variable

Digamos que tengo una variable str

 var str = "123" 

Ahora podría hacer console.log(`Hello ${str}`) e imprimirá Hello 123

Ahora tengo otra variable strnew

 var strnew = 'Hello ${str}' 

Nota (basada en respuestas / comentarios): strnew se lee de un file, por lo que siempre es una cadena y no se puede replace por `

¿Cómo puedo console.log(...) para imprimir Hello 123

¿Es posible sin ningún tipo de eval()

Con algo tan simple como ${str} puedes usar un simple reemploop de cadena:

 var template = (tpl, args) => tpl.replace(/\${(\w+)}/g, (_, v) => args[v]); var tpl = 'Hello ${str} and ${other}'; console.log(template(tpl, {str: 'foo', other: 'bar'})); 

Puede usar la function en lugar de solo la cadena.

 var strnew = function(str){ return `Hello ${str}`; } var str = "123"; console.log(strnew(str)) 

Gracias a esta respuesta , aquí hay un poco de código de magia negra que logra lo que quieres. Descargo de responsabilidad: esto es para aplicaciones divertidas / muy limitadas y exóticas. Es probable que sea muy lento y se descomponga en muchos casos extremos, pero con un scope limitado de su pregunta, funciona.

 function getString(){ return "calculating ${foo} + ${bar} = ${foo + bar}"; } var localEnvironmentProxy = new Proxy({}, { has(target, prop) { return true; }, get(target, prop) { return (prop in target ? target : window)[prop]; } }); with(localEnvironmentProxy){ var foo = 1; var bar = 2; var templString = getString(); var fnFullText = 'with(arguments[0]){ return `' + templString + '`;}'; var tempalteFn = new Function(fnFullText); console.log(tempalteFn(localEnvironmentProxy)); //calculating 1 + 2 = 3 }