精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三種實現 JavaScript 模板引擎的方法

開發 前端
小伙伴們,相信即使你是經驗豐富的開發者,也未必能很快的解決這道面試題。如果您想質疑這一說法,請繼續閱讀下去。

小伙伴們,相信即使你是經驗豐富的開發者,也未必能很快的解決這道面試題。如果您想質疑這一說法,請繼續閱讀下去。

最近,我的好朋友南希遇到了一個讓她發瘋的問題,面試官要求她現場實現一個JavaScript模板引擎。

很傷心,因為我的朋友只是在找工作,但面試官讓她造一架飛機。

問題如下:

請向 String 對象添加一個 render(obj) 方法,它的作用是將字符串中的特定字符替換為obj的相應屬性。

const template = 'My name is ${name}, age ${age}, I am a ${job.name}'
const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
const renderStr = template.render(employee)
// What is the output string?
console.log(renderStr) // 'My name is fatfish, age 100, I am a front end development'

什么是模板引擎?

你一定用過nunjucks之類的模板引擎,題型和它的功能很像,請跟著我一起舉個例子。

nunjucks.configure({ autoescape: true })
const template = 'My name is `name`, age `age`, I am a `job`.`name`'
const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
const renderStr = nunjucks.renderString(template, employee)
console.log(renderStr) // My name is fatfish, age 100, I am a front end development

我可憐的朋友被要求實現這樣的東西,它只是將 ${name} 替換為 `name` 而幾乎沒有別的。

解決方案 1:正則表達式

看到這個面試題,我的第一反應是用正則表達式來解決。只要我們能提取出字符串中的具體字符(name、age、job.name),問題就迎刃而解了。

第 1 步:提取變量

String.prototype.render = function (obj) {
const template = this
const variableRegex = /\$\{([^${}]+)\}/g
template.replace(variableRegex, ($0, variable) => {
console.log(variable)
})
}
const template = 'My name is ${name}, age ${age}, I am a ${job.name}'
template.render()

圖片

太好了,我們得到了 name、age、job.name 變量。下面我們來看看這個正則表達式是什么意思,可以點這個鏈接:https://jex.im/regulex/#!flags=&re=%5C%24%5C%7B(%5B%5E%24%7B%7D%5D%2B)%5C%7D進行查看。

const variableRegex = /\$\{([^${}]+)\}/g

我們要關注 ([^${}]+),這意味著至少有一個除 $、{、} 之外的字符。

第二步:獲取obj的具體值

當我們得到name, age, job.name,如何關聯到employee?


String.prototype.render = function (obj) {
const template = this
const variableRegex = /\$\{([^${}]+)\}/g
const getVariableValue = (variable) => {
// [ 'name' ]、[ 'age' ]、[ 'job', 'name' ]
variable = variable.split('.')
let variableValue = obj
// For example, if we want to get the value of job.name, we will go through the following steps
// Initialization: variableValue = { name: 'fatfish', age: 100, job: { name: "front end development" } }
// first loop: variableValue = { name: "front end development" }
// Second loop: variableValue = 'front end development'
// Third loop: finished, return 'front end development'
while (variable.length) {
variableValue = variableValue[ variable.shift() ]
}
return variableValue
}
const renderStr = template.replace(variableRegex, ($0, variable) => {
return getVariableValue(variable)
})
return renderStr
}

const template = 'My name is ${name}, age ${age}, I am a ${job.name}'
const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
const renderStr = template.render(employee)

console.log(renderStr)

我們通過正則表達式實現了一個簡單的模板引擎,請小伙伴們為自己打氣。

解決方案 2:eval

朋友們,讓我們回顧一下es6中模板字符串的基本用法。

const name = 'fatfish'
const age = 100
const job = {
name: 'front end development'
}
const renderString = `My name is ${name}, age ${age}, I am a ${job.name}`

console.log(renderString)

模板字符串非常有用,它們允許我們在字符串中嵌入表達式。

圖片

讓我們再次學習如何使用 eval。

const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
eval('var { name, age, job } = employee')

console.log(name, age, job)

很神奇,就好像我們聲明了三個變量name、age、job,我們可以隨意打印出它們的值。

有了這兩個知識點,我們的第二個方案就出來了。

String.prototype.render = function (obj) {
const template = this
// var { name, age, job } = obj
eval(`var {${Object.keys(obj).join(',')}} = obj`)
// `My name is ${name}, age ${age}, I am a ${job.name}`
const renderStr = eval('`' + template + '`')
return renderStr
}
const template = 'My name is ${name}, age ${age}, I am a ${job.name}'
const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}

const renderStr = template.render(employee)

圖片

給自己鼓掌,因為你已經用兩種方式實現了一個精簡版模板引擎。

解決方案3:with

雖然我們很少用到with關鍵字,但是可以用來解決這個問題。

這段代碼的輸出是什么?

const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
with (employee) {
console.log(name, age, job)
}

圖片

這與上面的代碼幾乎具有相同的效果,但更加簡潔易懂。

// var { name, age, job } = obj
eval(`var {${Object.keys(obj).join(',')}} = obj`)

好吧,我想你已經猜到了答案。

String.prototype.render = function (obj) {
with(obj) {
return eval('`' + this + '`')
}
}
const template = 'My name is ${name}, age ${age}, I am a ${job.name}'
const employee = {
name: 'fatfish',
age: 100,
job: {
name: 'front end development'
}
}
const renderStr = template.render(employee)

console.log(renderStr)

最后總結

以上就是我今天跟你分享的3種JavaScript模板引擎的實現方法,希望對你有幫助,如果你覺得有用的話,請點贊我,關注我,并將它分享給你周圍的朋友。

責任編輯:華軒 來源: web前端開發
相關推薦

2020-09-08 12:53:47

C++數據線程

2022-01-04 16:50:47

JavaScript圖片網站

2025-11-13 09:30:11

2010-09-30 15:37:29

ScrollBarJavascrip

2017-12-29 08:26:28

存儲引擎MySQL

2021-07-13 12:31:27

IT組織改進首席技術官

2013-01-04 15:47:54

Android開發平鋪UI設計

2015-05-07 15:19:47

IaaSPaaSAzure

2009-07-08 12:56:32

編寫Servlet

2019-08-30 17:24:41

microservic微服務

2021-11-05 21:33:28

Redis數據高并發

2021-06-24 08:52:19

單點登錄代碼前端

2014-12-31 17:42:47

LBSAndroid地圖

2024-11-06 09:28:52

架構客戶端靜態

2010-08-26 16:19:41

DIV圓角

2015-12-11 09:24:38

加密數據Linux

2016-09-12 14:07:14

Android 定時器

2022-05-30 07:07:35

Java監聽文件Java 8

2010-09-06 10:04:31

CSS樣式表

2010-09-14 15:10:49

CSS注釋
點贊
收藏

51CTO技術棧公眾號

免费观看国产视频| 紧身裙女教师波多野结衣| 成人免费直播| 国产欧美日韩在线看| 国产精品视频26uuu| 亚洲国产123| 国产精品欧美大片| 日本高清不卡aⅴ免费网站| 在线电影看在线一区二区三区| 97人妻精品一区二区三区软件| 欧美精品国产一区二区| 日韩精品高清视频| 日韩成人精品视频在线观看| av福利在线导航| 久久精品一区二区三区不卡牛牛| 国产精品自拍偷拍| 日本少妇激情视频| 欧美电影《睫毛膏》| 精品国产伦理网| 69久久久久久| ****av在线网毛片| 国产精品久久久99| 久久偷窥视频| 亚洲a视频在线观看| 免费精品视频最新在线| 欧美激情18p| 99久久久无码国产精品不卡| 国产 日韩 欧美 综合 一区| 欧美日韩极品在线观看一区| a在线视频观看| 成人日韩欧美| 中文字幕欧美三区| 久久国产精品99久久久久久丝袜| 91国产精品一区| 亚洲美女少妇无套啪啪呻吟| 久久综合久久美利坚合众国| 永久免费成人代码| 人人精品亚洲| 精品国产伦一区二区三区观看方式| 三上悠亚在线一区二区| 乡村艳史在线观看| 亚洲电影在线播放| 亚洲天堂第一区| 91伦理视频在线观看| 久久亚洲私人国产精品va媚药| 999视频在线免费观看| 中文字幕免费高清在线观看| 香蕉久久久久久久av网站| 久久久久久亚洲| 青青操国产视频| 99久久综合狠狠综合久久aⅴ| 亚洲人成免费电影| aaaaa一级片| 蜜桃一区av| 亚洲第五色综合网| 一级黄色大片免费看| 日本少妇精品亚洲第一区| 欧洲一区二区三区在线| 国产精品igao激情视频| 一广人看www在线观看免费视频| 久久久影院官网| 欧美二区三区在线| 你懂的视频在线观看| 91麻豆国产精品久久| 九九久久99| 特黄视频在线观看| 成人国产在线观看| 国产一区二区免费电影| 日本wwwxxxx| 91亚洲国产成人精品一区二区三 | 精品人人视频| 天天色综合天天| 免费成人在线视频网站| 欧美日韩123区| 在线欧美日韩国产| 亚洲精品久久久中文字幕| 婷婷久久综合九色综合99蜜桃| 欧美挠脚心视频网站| 一区二区三区网址| 国产精久久久| 精品日韩一区二区| 亚洲精品乱码久久久久久久| 妖精视频一区二区三区| 国产一区二区三区免费视频| 中文字幕精品亚洲| 欧美日韩mv| 18久久久久久| 久久久999久久久| 国内久久精品视频| 国产视频一区二区不卡| 九色视频在线播放| 国产精品看片你懂得| 国产欧美综合一区| www.51av欧美视频| 在线亚洲免费视频| 四虎1515hh.com| 欧美精品国产白浆久久久久| 亚洲天堂av高清| 印度午夜性春猛xxx交| 亚洲高清电影| 国产精品国产三级国产aⅴ浪潮| 又污又黄的网站| 成人免费高清视频在线观看| 欧洲一区二区在线| √天堂8在线网| 好吊成人免视频| 国产无色aaa| 牛牛影视一区二区三区免费看| 国产亚洲美女久久| 国产免费无码一区二区视频| 亚洲一区日韩| 亚洲综合中文字幕在线观看| 午夜视频免费在线| 亚洲欧洲日本在线| 免费黄色日本网站| 日韩成人精品| 一区二区欧美在线| 日本三级理论片| 黄色精品一二区| 欧美精品欧美精品| 久久久久黄久久免费漫画| 在线观看区一区二| 欧美在线一级片| 中文字幕一区二区三区乱码图片| 青青久久av北条麻妃黑人 | 日韩午夜小视频| 免费在线观看a视频| 亚洲三级免费| 亚洲自拍偷拍区| 北条麻妃在线| 狠狠色香婷婷久久亚洲精品| 欧美老女人bb| 9191国语精品高清在线| 国产成人jvid在线播放| 天堂av手机版| 亚洲制服丝袜av| 亚洲视频在线不卡| 999久久久国产精品| 国产精品91久久久| 日本亚洲欧美| 精品成人乱色一区二区| 国产清纯白嫩初高中在线观看性色| 91亚洲国产高清| 国产精品一二区| 成a人v在线播放| 91福利在线看| 一区二区黄色片| 欧美一区=区| 久久偷窥视频| 中文字幕高清在线播放| 亚洲国产欧美一区二区三区久久| 欧美日韩三级在线观看 | 成人性生活免费看| 欧美色123| 超碰97在线人人| 天堂av在线电影| 日韩欧美专区在线| 草视频在线观看| 国产激情精品久久久第一区二区 | 日韩欧美成人区| 自拍视频一区二区| 亚洲综合激情| 日本一区二区三区精品视频| 写真福利精品福利在线观看| 亚洲午夜精品久久久久久久久久久久| 欧美激情黑白配| 久久久久综合网| 亚欧在线免费观看| 色97色成人| 亚洲一区二区自拍| 污视频网站免费在线观看| 日韩免费视频一区| 五月天婷婷网站| 91丨九色porny丨蝌蚪| 国产成人无码一二三区视频| 国产亚洲一区二区三区不卡| 国产精品欧美久久久| 欧美日韩在线看片| 日韩一区二区三免费高清| 国产亚洲欧美精品久久久www| 成人激情校园春色| 久草青青在线观看| 欧美色图在线播放| 91香蕉嫩草影院入口| 国产精品186在线观看在线播放| 欧美精品一区二区三区高清aⅴ| 成人午夜视频在线播放| 欧美激情一二三区| 日韩a一级欧美一级| 亚洲人体大胆视频| 香蕉久久免费影视| 精品一区91| 欧美在线精品免播放器视频| 99riav在线| 精品国产免费久久| 亚洲中文无码av在线| 一区二区三区欧美日| 成人无码www在线看免费| 免费高清成人在线| 国产精品久久国产| 精品一区二区三区中文字幕老牛| 成人免费在线视频网站| 波多野一区二区| 丝袜一区二区三区| 天堂在线观看视频| 欧美日本视频在线| 日本天堂网在线| 一区二区三区 在线观看视频| 巨胸大乳www视频免费观看| 久久99热这里只有精品| 无码人妻h动漫| 欧美福利网址| 夜夜爽99久久国产综合精品女不卡 | 国产不卡视频在线| 日本高清成人vr专区| 亚洲欧洲在线看| 亚洲AV无码一区二区三区少妇| 91国偷自产一区二区开放时间| 久久久国产精品黄毛片| 国产精品美女久久久久aⅴ| 日本精品一二三| 久久66热re国产| 久久久久久久激情| 亚洲国产免费| 亚洲一区 在线播放| 91视频精品| 日本一区二区三区四区在线观看| 久久香蕉精品香蕉| 国产98在线|日韩| 亚洲青青一区| 国产美女久久精品香蕉69| 天堂av在线| 久久青草福利网站| 天堂8中文在线| 不卡av电影在线观看| 92国产在线视频| 国产亚洲免费的视频看| 欧美xxx.com| 日韩精品亚洲精品| 日本黄色不卡视频| 欧美成人一级视频| av网站免费大全| 3atv一区二区三区| 一级黄色片在线看| 欧美精品一二三四| 在线亚洲欧美日韩| 欧美三级电影在线观看| 国产精品无码粉嫩小泬| 在线视频中文字幕一区二区| 四虎成人在线观看| 日韩欧美在线观看| 日韩精品一区二区亚洲av| 精品国产91久久久久久| 日本一区二区网站| 无吗不卡中文字幕| 日本一区二区三区免费视频| 天天影视涩香欲综合网| 久久久久久久久久久久久av| 欧美日韩精品在线播放| av中文在线播放| 一本一本大道香蕉久在线精品| 国产一级18片视频| 欧美亚一区二区| 一本色道久久综合亚洲| 3atv在线一区二区三区| www.天堂av.com| 亚洲国产精品va在线观看黑人| 色偷偷在线观看| 亚洲精品自拍偷拍| аⅴ资源新版在线天堂| 最近2019中文字幕mv免费看| 九色porny丨首页在线| 理论片在线不卡免费观看| 手机av免费在线| 91高清视频免费观看| 四虎成人在线| 91精品视频在线| 91亚洲无吗| 美脚丝袜一区二区三区在线观看| 国产精品嫩模av在线| 伊人久久大香线蕉精品| 欧美日韩国产亚洲一区| 亚欧无线一线二线三线区别| 视频在线在亚洲| 能看毛片的网站| 91性感美女视频| av黄色免费在线观看| 亚洲国产精品麻豆| 久久精品99北条麻妃| 欧美一区二区大片| 亚洲 欧美 精品| 日韩天堂在线视频| 毛片在线网站| 成人国产精品久久久| 久久资源综合| 亚洲精品一区二区三区四区五区| 国内精品久久久久久久影视蜜臀 | 精品欧美一区二区久久| 亚洲 欧美 精品| 久久这里只有精品视频首页| 天堂在线中文网官网| 成人精品一区二区三区| 台湾亚洲精品一区二区tv| 一级黄色免费在线观看| 亚洲一区二区网站| 国产5g成人5g天天爽| 91免费精品国自产拍在线不卡 | 亚洲aaa精品| 91国内精品视频| 日韩麻豆第一页| 影音先锋男人资源在线| 国产成人在线播放| 成人爽a毛片| 亚洲欧美精品| 国产亚洲一级| 韩国一区二区三区四区| 国产精品卡一卡二卡三| 亚洲大片免费观看| 亚洲精品一线二线三线无人区| 三区四区电影在线观看| 欧洲一区二区视频| 国产精品chinese在线观看| 亚洲精品欧美精品| 亚洲综合另类| japanese在线观看| 亚洲精品视频在线| 在线中文字幕网站| 国产亚洲欧美日韩美女| 中文字幕21页在线看| 精品国产免费一区二区三区| 欧美国产激情| 色一情一区二区| 久久久精品国产免大香伊| 国产精品成人网站| 日韩精品一区二区三区蜜臀| 欧美性猛交xxx乱大交3蜜桃| 国产精品视频久| 成人久久一区| 性欧美极品xxxx欧美一区二区| 91色婷婷久久久久合中文| 久久精品欧美一区二区| 日韩欧美国产不卡| 污片视频在线免费观看| 亚洲va久久久噜噜噜久久天堂| 色999日韩| 欧美在线aaa| 国产精品久久久久影视| 超碰在线观看91| 国产亚洲精品美女久久久| 美女100%一区| 日本视频一区二区不卡| 久久影院亚洲| 女女互磨互喷水高潮les呻吟| 色哟哟精品一区| 欧美女优在线| 国产精品高精视频免费| 成人区精品一区二区婷婷| 国产三级国产精品国产专区50| 国产精品麻豆欧美日韩ww| 亚洲一区二区天堂| 精品久久久av| 91蝌蚪精品视频| 日韩精品―中文字幕| 久久久精品免费网站| 凹凸精品一区二区三区| 搡老女人一区二区三区视频tv| 黄色欧美视频| 美女在线免费视频| 国产成人av一区二区三区在线| 精品小视频在线观看| 日韩精品中文字幕在线| 日韩av大片站长工具| 亚洲国产一区二区在线| 韩国成人福利片在线播放| 欧美日韩中文视频| 亚洲欧洲日产国产网站| 国产亚洲欧美日韩精品一区二区三区 | jlzzjlzz亚洲女人18| 久久久免费观看| 中文字幕亚洲影视| 欧美成年人视频在线观看| 亚洲免费观看高清完整版在线 | 日本亚洲欧美在线| 亚洲欧洲激情在线| 白嫩亚洲一区二区三区| 欧美乱大交xxxxx潮喷l头像| 久久久亚洲国产美女国产盗摄| 亚洲一级在线播放| 欧美激情在线观看视频| 国产va免费精品观看精品视频| 日韩爱爱小视频| 亚洲国产美女搞黄色| 九色在线视频蝌蚪| 亚洲最大福利视频网站| 久久成人亚洲| 印度午夜性春猛xxx交| 亚洲深夜福利网站| 4438全国亚洲精品观看视频| aaa毛片在线观看| 亚洲精品视频在线观看网站|