Menukar Rentetan Mudah kepada Rentetan Templat
Bolehkah rentetan biasa diubah menjadi rentetan templat dengan mudah? Pertimbangkan contoh berikut:
let a = "b:${b}";
Bagaimanakah kita boleh menukar ini kepada rentetan templat secara dinamik, tanpa menggunakan eval, Fungsi baharu atau teknik penjanaan kod dinamik yang lain?
let b = 10; console.log(a.template()); // b:10
Penyelesaian ES6
Dalam JavaScript moden, kami boleh memanfaatkan ciri ES6 untuk mencapai ini penukaran:
String.prototype.interpolate = function(params) { const names = Object.keys(params); const vals = Object.values(params); return new Function(...names, `return \`${this}\`;`)(...vals); }; const template = 'Example text: ${text}'; const result = template.interpolate({ text: 'Foo Boo' }); console.log(result); // 'Example text: Foo Boo'
Kaedah ini menggunakan fungsi String.prototype.interpolate yang menerima objek parameter. Ia membina fungsi baharu secara dinamik menggunakan kekunci dan nilai objek, kemudian melaksanakannya untuk mengembalikan rentetan interpolasi.
Atas ialah kandungan terperinci Bagaimanakah Rentetan Biasa Boleh Ditukar kepada Templat Literal Tanpa `eval` atau `Fungsi baharu`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!