ECMAScript6-模板字符串

模板字符串啊,模板字符串,整體給我的印象,有點像我之前用過的FreeMarker,一種佔位符的感覺。

模板字符串使用反撇號`來取代普通字符串的單引號’或雙引號”,除此之外,至少看起來與普通字符串沒什麼大區別。

模板字符串最基本的用途就是模板佔位符(這就是爲什麼說是有點像FreeMarker)。

模板佔位符表現爲${JS表達式},這裏的表達式可以是函數調用、算術運算、甚至還可以是模板佔位符。JS表達式最後是字符串,因此,最後還是迴歸到toString()方法上。如果想在模板佔位符輸出關鍵字符,則在其前面添加反斜槓,例如:\`、\$、\{。

模板字符串可以多行書寫,即2個`之間的字符串可以分成多行來書寫,且中間的所有空格、換行、縮進都原樣輸出在生成的字符串中。

模板字符串有其自身的不足:

①不會自動轉移特殊字符,因此爲了避免跨站攻擊XSS,需要開發者自己處理。

②與國際化庫兼容不好。

③沒有內建的循環語法與條件語句,因此無法通過循環方式來生成<tr/>之類的代碼。

④綜上所述,模板字符串僅僅是實現了一個簡單的佔位符功能,尚且無法與專業的模板引擎相提並論。

如果開發者就是不想用專業的模板引擎,想繼續使用模板字符串來實現其他引擎類似的功能,其實也能實現,就是稍微麻煩點,這個麻煩點的技術就是:標籤模板。

標籤模板的語法就是:在模板字符串開始的反撇號`前面,附件一個額外的標記。這裏的標記既可以是成員表達式,也可以是調用表達式。

var msg = test`<p>${book.writer},您好</p>`’

標籤模板,你可以理解爲完全簡化了函數調用,因此,上面的代碼等同於:

var msg = test(templateData,book.writer);

這裏就詳細說明下該函數:

參數templateData:是一個不可變數組,該數組存儲着模板所有的字符串部分,由JS自動創建該數組,爲什麼說是不可變數組呢?那是因爲佔位符${}將標籤模板進行了分割,因此數組長度、內容是固定的。另外該數組對象還有一個templateData.raw屬性,該屬性類型也是數組,也是存儲標籤模板中所有的字符串內容,只不過跟templateData中的內容不一樣,舉個例子:raw中會使用\n的轉義字符還代表分行,而templateData則爲真正的分行。

參數book.writer:這就是你要顯示的內容。

剩下的,就看你根據自己的需求去完善test函數的內部邏輯了。這裏可以解決掉模板字符串不支持循環遍歷、邏輯判斷等缺陷。

發佈了167 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章