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