摘要:如果使用模板字符串表示多行字符串,則所有的空格縮進(jìn)和換行都會(huì)被保留在輸出中。模板字符串中嵌入變量,要將變量名寫(xiě)在之中。變量沒(méi)有聲明模板字符串之間還可以進(jìn)行嵌套。上面代碼中,模板字符串前面有一個(gè)標(biāo)識(shí)名,它是一個(gè)函數(shù)。
語(yǔ)法
模板字符串(Template String)是增強(qiáng)版的字符串,用反引號(hào)(`)標(biāo)識(shí),它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串,或者在字符串中嵌入變量。
用法
// 普通字符串 `In JavaScript " " 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?
上面代碼中,模板字符串都是用反引號(hào)表示,如果在模板字符串中需要使用反引號(hào),則前面需要用反斜杠轉(zhuǎn)義。
var greeting = ``Yo` World!`; // `Yo` World!
如果使用模板字符串表示多行字符串,則所有的空格、縮進(jìn)和換行都會(huì)被保留在輸出中。
$("#list").html(`
上面代碼中,所有模板字符串的空格和換行都是被保留的,比如
$("#list").html(`
模板字符串中嵌入變量,要將變量名寫(xiě)在${}之中。大括號(hào)內(nèi)可以放入任意的JavaScript表達(dá)式,可以進(jìn)行運(yùn)算,以及引入對(duì)象屬性。
var x = 1, y = 2; `${x} + ${y} = ${x + y}`; // "1 + 2 = 3" `${x} + ${y * 2} = ${x + y * 2}`; // "1 + 4 = 5" var obj = {x: 1, y: 2}; `${obj.x + obj.y}` // "3"
模板字符串之中還可以調(diào)用函數(shù)。
function func() { return "Hello"; } `${func()} World`; // "Hello World"
如果大括號(hào)中的值不是字符串,則將按照一般的規(guī)則轉(zhuǎn)換為字符串。如,若大括號(hào)中是一個(gè)對(duì)象,則將默認(rèn)調(diào)用對(duì)象的toString方法,把對(duì)象轉(zhuǎn)換為字符串。
如果模板字符串中的變量沒(méi)有聲明,則會(huì)報(bào)錯(cuò)。
// 變量place沒(méi)有聲明 var msg = `Hello, ${place}`; // ReferenceError: place is not defined
模板字符串之間還可以進(jìn)行嵌套。
var tmpl = addrs => `
${addr.first} |
${addr.last} |
a |
b |
如果需要引用模板字符串本身,在需要時(shí)執(zhí)行,可以像下面這樣寫(xiě)。
// 寫(xiě)法一 var str = "return " + "`Hello ${name}!`"; var func = new Function("name", str); func("Amy"); // "Hello Amy!" // 寫(xiě)法二 var str = "(name) => `Hello ${name}!`"; var func = eval.call(null, str); func("Amy"); // "Hello Amy!"
模板字符串的功能,不僅是上面那些,它還可以緊跟在一個(gè)函數(shù)后面,該函數(shù)將被調(diào)用來(lái)處理這個(gè)模板字符串,這種稱為“標(biāo)簽?zāi)0濉惫δ?Tagged template)。
標(biāo)簽?zāi)0搴瘮?shù)第一個(gè)參數(shù)是字符串模板的常量數(shù)組,后面的每一個(gè)參數(shù)為表達(dá)式的計(jì)算結(jié)果,函數(shù)名稱可以任意指定。下面是一個(gè)例子:
var a = 5, b = 10; function tag(strings, ...values) { console.log(strings[0]); // "Hello " console.log(strings[1]); // " world" console.log(strings[2]); // "" console.log(values[0]); // 15 console.log(values[1]); // 50 return "Anything"; } tag`Hello ${a + b} world ${a * b}`; // Anything alert`123` // 等同于 alert(123)
標(biāo)簽?zāi)0迤渌且环N特殊的函數(shù)調(diào)用形式,“標(biāo)簽”指的就是函數(shù),緊跟在后面的模板字符串就是它的參數(shù)。
var a = 1, b = 2; tag`Helo ${a + b} world ${a * b}`;
上面代碼中,模板字符串前面有一個(gè)標(biāo)識(shí)名tag,它是一個(gè)函數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/84195.html
摘要:從模板文件構(gòu)建首頁(yè)新聞手動(dòng)的指定每一個(gè)模板文件,在一些場(chǎng)景下難免難以滿足需求,我們可以使用通配符正則匹配載入。 從字符串載入模板 我們可以定義模板字符串,然后載入并解析渲染: template.New(tplName string).Parse(tpl string) // 從字符串模板構(gòu)建 tplStr := ` {{ .Name }} {{ .Age }} ` // if ...
摘要:是一個(gè)弱邏輯的模板引擎,語(yǔ)法十分簡(jiǎn)單,使用很方便。源碼只有行,且代碼結(jié)構(gòu)清晰。解析器解析器是整個(gè)源碼中最重要的方法,用于解析模板,將標(biāo)簽與模板標(biāo)簽分離。同時(shí)比較后還需將的最后一個(gè)刪除,才能進(jìn)行下一輪比較。 mustache.js是一個(gè)弱邏輯的模板引擎,語(yǔ)法十分簡(jiǎn)單,使用很方便。源碼(v2.2.1)只有600+行,且代碼結(jié)構(gòu)清晰。 一般來(lái)說(shuō),mustache.js使用方法如下: var ...
摘要:前兩篇文章主要說(shuō)明了的模板系統(tǒng)將模板文件處理后得到的結(jié)果函數(shù)。生成函數(shù)的代碼這個(gè)是模板生成過(guò)程中最長(zhǎng)最復(fù)雜的一段,會(huì)應(yīng)用到的分析功能以及動(dòng)態(tài)編譯功能。參數(shù)都是一個(gè),表示還未解析的模板內(nèi)容。 前兩篇文章主要說(shuō)明了web.py的模板系統(tǒng)將模板文件處理后得到的結(jié)果:__template__()函數(shù)。本文主要講述模板文件是如何變成__template__()函數(shù)的。 Render和frende...
摘要:文章目錄模板模板的概念函數(shù)模板函數(shù)模板語(yǔ)法函數(shù)模板注意事項(xiàng)函數(shù)模板案例普通函數(shù)與函數(shù)模板的區(qū)別普通函數(shù)與函數(shù)模板的調(diào)用規(guī)則模板的局限性類(lèi)模板類(lèi)模板語(yǔ)法類(lèi)模板與函數(shù)模板區(qū)別類(lèi)模板中成員函數(shù)創(chuàng)建時(shí)機(jī)類(lèi)模板對(duì)象做函數(shù)參數(shù)類(lèi)模 ...
摘要:我們提取變量的目的就是為了在函數(shù)中生成相應(yīng)的變量賦值的字符串便于在函數(shù)中使用,例如這樣的話,只需要在調(diào)用這個(gè)匿名函數(shù)的時(shí)候傳入對(duì)應(yīng)的即可獲得我們想要的結(jié)果了。 showImg(https://segmentfault.com/img/bVSspq?w=4000&h=2670); 題圖:Vincent Guth 注:本文所有代碼均可在本人的個(gè)人項(xiàng)目colon中找到,本文也同步到了知乎專欄...
閱讀 2257·2021-11-25 09:43
閱讀 2375·2021-11-24 09:39
閱讀 1678·2021-11-22 12:02
閱讀 3057·2021-11-17 09:33
閱讀 3512·2021-11-15 11:38
閱讀 2947·2021-10-13 09:40
閱讀 1150·2021-09-22 15:41
閱讀 1749·2019-08-30 10:58