淺談ES6 模板字符串的具體使用方法
寫在前面
關(guān)于 ES6, 也終于在 2015 年的 7 月 18 號(hào)塵埃落定了。雖然說(shuō)各大瀏覽器還沒(méi)有全面的支持,不過(guò)這并不妨礙我們一顆想要擼一把的心。在后端,可以使用 Node.js(0.12+)或 io.js, 前端的話,也可以使用Babel 或Traceur 進(jìn)行語(yǔ)法預(yù)轉(zhuǎn)義成 ES5使用 。
關(guān)于該系列(不知道能不能成為一個(gè)系列,總是各種懶),會(huì)沒(méi)有規(guī)律的挑選一些內(nèi)容來(lái)學(xué)習(xí)。歡迎大家積極糾錯(cuò),留言探討。
模板字符串(template strings)
用法
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
// 字符串中嵌入變量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?` // Hello Bob, how are you today?
ES6 中引進(jìn)的一種新型的字符串字面量語(yǔ)法 - 模板字符串。書(shū)面上來(lái)解釋,模板字符串是一種能在字符串文本中內(nèi)嵌表示式的字符串字面量。簡(jiǎn)單來(lái)講,就是增加了變量功能的字符串。
先來(lái)看一下以前我們對(duì)字符串的使用:
/**
* Before ES6 字符串拼接
*/
var name = '丁香醫(yī)生';
var desc = '丁香醫(yī)生是面向大眾的科普性健康類網(wǎng)站';
var html = function(name, desc){
var tpl = '公司名:' + name + '\n'+
'簡(jiǎn)介:'+ desc;
return tpl;
}
而現(xiàn)在:
var html = `公司名:${name}
簡(jiǎn)介:${desc}`;
很簡(jiǎn)潔吧。
引一段 MDN 對(duì)于模板字符串的定義:
模板字符串使用反引號(hào) () 來(lái)代替普通字符串中的用雙引號(hào)和單引號(hào)。模板字符串可以包含特定語(yǔ)法(${expression})的占位符。占位符中的表達(dá)式和周圍的文本會(huì)一起傳遞給一個(gè)默認(rèn)函數(shù),該函數(shù)負(fù)責(zé)將所有的部分連接起來(lái)。
而占位符${},可以是任意的 js 表達(dá)式(函數(shù)或者運(yùn)算),甚至是另一個(gè)模板字符串,會(huì)將其計(jì)算的結(jié)果作為字符串輸出。如果模板中需要使用$,{等字符串,則需要進(jìn)行轉(zhuǎn)義。
看個(gè)例子就明白了。
var x = 1;
var y = 2;
`${ x } + ${ y } = ${ x + y}` // "1 + 2 = 3"
不同于普通字符串,模板字符串還可以多行書(shū)寫,模板字符串中所有的空格,新行,縮進(jìn)都會(huì)原樣的輸出在生成的字符串中。
而單純的模板字符串還存在著很多的局限性。如:
- 不能自動(dòng)轉(zhuǎn)義特殊的字符串。(這樣很容易引起注入攻擊)
- 不能很好的和國(guó)際化庫(kù)配合(即不會(huì)格式化特定語(yǔ)言的數(shù)字,日期,文字等)
- 沒(méi)有內(nèi)建循環(huán)語(yǔ)法,(甚至連條件語(yǔ)句都不支持, 只可以使用模板套構(gòu)的方法)
標(biāo)簽?zāi)0?tagged template)
為此,引出了標(biāo)簽?zāi)0宓母拍睢?biāo)簽?zāi)0鍎t是在反引號(hào)前面引入一個(gè)標(biāo)簽(tag)。該標(biāo)簽是一個(gè)函數(shù),用于處于定制化模板字符串后返回值。就拿上面對(duì)特殊字符串舉例。
/**
* HTML 標(biāo)簽轉(zhuǎn)義
* @param {Array.<DOMString>} templateData 字符串類型的tokens
* @param {...} ..vals 表達(dá)式占位符的運(yùn)算結(jié)果tokens
*
*/
function SaferHTML(templateData) {
var s = templateData[0];
for (var i = 1; i < arguments.length; i++) {
var arg = String(arguments[i]);
// Escape special characters in the substitution.
s += arg.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
// Don't escape special characters in the template.
s += templateData[i];
}
return s;
}
// 調(diào)用
var html = SaferHTML`<p>這是關(guān)于字符串模板的介紹</p>`;
標(biāo)簽函數(shù)會(huì)接收多個(gè)參數(shù)。
- 第一個(gè)參數(shù)是包含了字符串字面量(即那些沒(méi)有變量替換的值)的數(shù)組
- 后面的參數(shù)是已經(jīng)替換后的變量值
改一下例子1
var name = '丁香醫(yī)生';
var desc = '丁香醫(yī)生是面向大眾的科普性健康類網(wǎng)站';
tag`公司名:${name}簡(jiǎn)介:${desc}`
tag 的參數(shù)則分別為 ['公司名:','簡(jiǎn)介:'], '丁香醫(yī)生', '丁香醫(yī)生是面向大眾的科普性健康類網(wǎng)站'。
有了此類方法,就大大的增加了控制的權(quán)利。如上面說(shuō)的國(guó)際化庫(kù)甚至循環(huán)語(yǔ)句。
瀏覽器兼容性
- 服務(wù)器端, io.js 支持
- 瀏覽器端, FF34+ , chrome 41+
- 移動(dòng)端 IOS 8, Android 4.4
- IE Tech Preview
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 利用es6 new.target來(lái)對(duì)模擬抽象類的方法
- js es6系列教程 - 基于new.target屬性與es5改造es6的類語(yǔ)法
- ES6中new Function()語(yǔ)法及應(yīng)用實(shí)例分析
- JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法
- ES6中Array.includes()函數(shù)的用法
- 詳解JavaScript ES6中的模板字符串
- JavaScript中ES6 Babel正確安裝過(guò)程
- JavaScript ES6中CLASS的使用詳解
- ES6中新增的Object.assign()方法詳解
- es6中new.target的作用和使用場(chǎng)景簡(jiǎn)單示例分析
相關(guān)文章
js提示框替代系統(tǒng)alert,自動(dòng)關(guān)閉alert對(duì)話框的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇js提示框替代系統(tǒng)alert,自動(dòng)關(guān)閉alert對(duì)話框的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
JS網(wǎng)頁(yè)播放聲音實(shí)現(xiàn)代碼兼容各種瀏覽器
JS網(wǎng)頁(yè)播放聲音有多種方法可以實(shí)現(xiàn),不過(guò)兼容各種瀏覽器的就沒(méi)有幾個(gè)了,不過(guò)本文的這個(gè)示例或許對(duì)大家有所幫助2013-09-09
JavaScript Window瀏覽器對(duì)象模型方法與屬性匯總
本文給大家匯總分享的是JavaScript Window瀏覽器對(duì)象模型方法與屬性,十分的細(xì)致全面,這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04
JavaScript SHA1加密算法實(shí)現(xiàn)詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了JavaScript SHA1加密算法實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2016-10-10
微信小程序-橫向滑動(dòng)scroll-view隱藏滾動(dòng)條
本篇文章主要介紹了微信小程序-橫向滑動(dòng)scroll-view隱藏滾動(dòng)條的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
JavaScript關(guān)閉當(dāng)前頁(yè)面(窗口)不帶任何提示
這篇文章主要介紹了JavaScript關(guān)閉當(dāng)前頁(yè)面(窗口)不帶任何提示的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
javascript中的深復(fù)制詳解及實(shí)例分析
這篇文章主要介紹了javascript中的深復(fù)制詳解及實(shí)例分析的相關(guān)資料,需要的朋友可以參考下2016-12-12
js設(shè)置文本框中焦點(diǎn)位置在最后的示例代碼(簡(jiǎn)單實(shí)用)
本篇文章主要是對(duì)js設(shè)置文本框中焦點(diǎn)位置在最后的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03

