學習 ECMAScript/JavaScript 6 - Template strings
Template strings 之用法可參考 ES6 In Depth: Template strings。基本的 template string 用法是字串內容必須用反引號 (`) ,而要插值的變數名稱則要包進 ${}
括號中。例如 `Hello ${myName}, template string.`
。
更進一步說,放在括號中的內容可以是任何有效的表達句。除了變數外,也能用函數或計算式。下列都是有效的例子:
取陣列元素 ${abc[2]}
字串切片: ${"slice of string".substr(3, 5)} .
1 + 1 = ${1+1}
- ` ${“a,b,c”.split(‘,’)[1]} `
此語法功能之基礎,和我在 JavaScript print format 做的事大致相同。差別在於我實作的 interpolate()
和要插值的變數內容不在同一個作用域,故我必須將那些變數作為參數傳入。而 ES6 的 template strings 則是原地擴展,可直接取得要插值的變數。
進一步看 tagged templates 的工作方式,那就和我實作 interpolate()
的方式更像了。所謂 tag 實際是一個可執行敘述,通常是一個函數,所以解釋時也是將要插值的變數作為參數傳入。
例如:
實際上會解釋為:
ES6 會先將 template string 中不插值的部份拆段,變成一個集合作為 tag 函數的第一個參數。再將要插值的變數添加到參數清單中。在 tag 函數內,你可以選擇用傳統的 arguments
個體取得參數清單中要插值的內容,也可以用 ES6 增加的 rest parameters 語法。範例 SaferHTML()
是用 arguments
。
tag 允許設計者做更多的事。你可以自己解釋如何使用要插值的內容,也可以更進一步地對不插值的 templateData 添加自己定義的處理規則。對了,最後別忘了將這些字串連接在一起。我個人傾向用 concat()
連接字串,而不是 +=
。
相關文章
- 石頭閒語: JavaScript print format
- ES6 In Depth: Template strings
- Variable declarations and more in the new JavaScript
- 石頭閒語: ECMAScript/JavaScript 6 - Template strings
- 石頭閒語: ECMAScript/JavaScript 6 - Symbol
- 石頭閒語: ECMAScript/JavaScript 6 - for-of 與 iterator。
- 石頭閒語: ECMAScript/JavaScript 6 - Generator
- 石頭閒語: ECMAScript/JavaScript 6 - 新函數語法 - Arrow functions, Rest and Spread parameters, Default value
- 石頭閒語: ECMAScript/JavaScript 6 - Destructuring
- 石頭閒語: ECMAScript/JavaScript 6 - var, let 和 const
- 石頭閒語: ECMAScript/JavaScript 6 - Proxy 和 Reflect
- 石頭閒語: ECMAScript/JavaScript 6 - Class
- 石頭閒語: ECMAScript/JavaScript 6 - 語法補遺
- 石頭閒語: ECMAScript/JavaScript 6 - Promise