日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

面試官:你能實現一個 JavaScript 模板引擎嗎?

來源: 責編: 時間:2024-05-29 08:57:07 217觀看
導讀Hello,大家好,我是 Sunday。這個問題具體是這樣的:請為字符串增加一個 render 方法,可以實現如下最終的打印。const template = '我是 ${name}, 年齡 ${age} 歲'const employee = { name: 'Sunday', age: 18}const rend

Hello,大家好,我是 Sunday。R0z28資訊網——每日最新資訊28at.com

這個問題具體是這樣的:請為字符串增加一個 render 方法,可以實現如下最終的打印。R0z28資訊網——每日最新資訊28at.com

const template = '我是 ${name}, 年齡 ${age} 歲'const employee = {  name: 'Sunday',  age: 18}const renderStr = template.render(employee)// 輸出成字符串console.log(renderStr) // '我是 Sunday, 年齡 18 歲'

乍一看,這不就是 模板引擎 嗎?合著這是讓我手寫一個 `` 的簡易版出來啊。R0z28資訊網——每日最新資訊28at.com

不過還好,既然是簡易版那就并不復雜。一共有三種方式,咱們來看看吧!R0z28資訊網——每日最新資訊28at.com

01:利用正則表達式

使用正則表達式應該是大多數的同學第一時間想到的方案了。R0z28資訊網——每日最新資訊28at.com

只需要通過正則替換 ${name} 和 ${age} 就可以直接實現對應的功能。R0z28資訊網——每日最新資訊28at.com

String.prototype.render = function (obj) {  const template = this  const variableRegex = //$/{([^${}]+)/}/g  template.replace(variableRegex, ($0, variable) => {     // 打印對應的屬性    console.log(variable)  })}const template = '我是 ${name}, 年齡 ${age} 歲'template.render()

通過以上代碼我們可以直接拿到 ${name} 之中的屬性,所以接下來咱們就只需要完成替換即可。R0z28資訊網——每日最新資訊28at.com

// 為 String 對象的原型添加一個名為 render 的方法String.prototype.render = function (obj) {  // 保存調用該方法的字符串實例  const template = this;  // 定義一個正則表達式,用于匹配 ${variableName} 格式的變量  const variableRegex = //$/{([^${}]+)/}/g;  // 定義一個函數,用于根據傳入的對象獲取變量的值  const getVariableValue = (variable) => {    // 將變量名按照 '.' 分隔成數組,例如 'user.name' 會分隔成 ['user', 'name']    variable = variable.split('.');    // 初始化 variableValue,使其指向傳入的對象 obj    let variableValue = obj;    // 遍歷分隔后的變量名數組,逐層獲取嵌套屬性的值    while (variable.length) {      // 取出數組的第一個元素,并獲取對應的屬性值      variableValue = variableValue[variable.shift()];    }    // 返回最終獲取到的變量值    return variableValue;  };  // 使用 replace 方法替換模板字符串中的變量  // $0 是匹配到的整個字符串,例如 ${name}  // variable 是捕獲組中的變量名,例如 name  const renderStr = template.replace(variableRegex, ($0, variable) => {    // 獲取變量值并替換模板中的變量    return getVariableValue(variable);  });  // 返回替換后的字符串  return renderStr;};

02:使用 eval

eval() 函數會將傳入的字符串當做 JavaScript 代碼進行執行。R0z28資訊網——每日最新資訊28at.com

比如:R0z28資訊網——每日最新資訊28at.com

const employee = {  name: 'Sunday',  age: 18}const { name } = employeeconsole.log(name) // Sunday

這樣的代碼使用 eval 方法可以這么寫:R0z28資訊網——每日最新資訊28at.com

const employee = {  name: 'Sunday',  age: 18}// 注意:必須是 vareval('var { name } = employee')console.log(name) // Sunday

這樣的好處在于 可以根據 obj 的 key 動態的生成新的變量。R0z28資訊網——每日最新資訊28at.com

因此,就可以得到如下代碼:R0z28資訊網——每日最新資訊28at.com

// 為 String 對象的原型添加一個名為 render 的方法String.prototype.render = function (obj) {  // 保存調用該方法的字符串實例  const template = this;  // 使用 eval 動態解構 obj 對象,將其屬性名作為變量名,并賦值給這些變量  // 例如,obj = { name: 'Sunday', age: 18}  // 生成的代碼類似于:var { name, age, job } = obj;  eval(`var {${Object.keys(obj).join(',')}} = obj`);  // 使用模板字符串替換變量,并生成最終的字符串  // 這里的 eval 用于解析和執行模板字符串,其中包含 obj 對象的屬性值  // 例如,template = '我是 ${name}, 年齡 ${age} 歲'  // 生成的代碼類似于:`我是 ${name}, 年齡 ${age} 歲`  const renderStr = eval('`' + template + '`');  // 返回替換后的字符串  return renderStr;}

03:with 關鍵字

with 語句擴展一個語句的作用域鏈R0z28資訊網——每日最新資訊28at.com

with 關鍵字屬于被棄用的語法(但是 Vue3 的源碼中依然使用到了 with),但是在這里依然可以實現對應的功能。R0z28資訊網——每日最新資訊28at.com

圖片圖片R0z28資訊網——每日最新資訊28at.com

我們可以通過以下示例來演示 with 的作用:R0z28資訊網——每日最新資訊28at.com

const employee = {  name: 'Sunday',  age: 18}with (employee) {  console.log(name, age)  // Sunday 18}

基于這個特性,使用 with 實現這個功能就非常簡單了。R0z28資訊網——每日最新資訊28at.com

String.prototype.render = function (obj) {  with(obj) {     // this 實例。即:我是 ${name}, 年齡 ${age} 歲     // 兩邊加上 ` ` 即可利用 ES6 的模板運算符實現此功能    return eval('`' + this + '`')  }}

本文鏈接:http://m.www897cc.com/showinfo-26-91363-0.html面試官:你能實現一個 JavaScript 模板引擎嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 記一次 .NET某工控WPF程序被人惡搞的卡死分析

下一篇: Python 對象的行為是怎么區分的?

標簽:
  • 熱門焦點
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 分布式系統中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統的小伙伴們來說,一提起分布式系統,就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
在线视频精品| 一区二区视频免费在线观看 | 老司机精品久久| 久久久久久欧美| 免费人成精品欧美精品| 欧美精品一区二区三区一线天视频| 欧美日韩综合在线| 国产日本欧美一区二区| 一区精品久久| 一区二区高清在线观看| 欧美在线日韩在线| 欧美大片在线看| 国产精品日韩欧美| 亚洲第一黄网| 亚洲一区国产精品| 另类成人小视频在线| 国产精品qvod| 亚洲成人资源| 亚洲一区二区精品在线| 久久野战av| 国产精品久久久久久久久免费桃花| 很黄很黄激情成人| 亚洲天堂av在线免费观看| 久久一区二区三区国产精品| 欧美午夜免费电影| 亚洲第一区中文99精品| 亚洲综合色丁香婷婷六月图片| 老牛嫩草一区二区三区日本| 国产精品久久久999| 亚洲国产精品久久久久秋霞不卡| 亚洲欧美日韩一区二区三区在线观看| 欧美成人精品不卡视频在线观看 | 国产精品麻豆成人av电影艾秋 | 久久国产综合精品| 欧美小视频在线观看| 在线日韩电影| 欧美一区二区黄| 欧美日韩亚洲成人| 在线看日韩欧美| 欧美在线视频导航| 欧美午夜精品久久久久久人妖| 尤物在线精品| 久久国产精品99久久久久久老狼| 欧美色播在线播放| 亚洲精品社区| 久久午夜视频| 国产一区二区三区成人欧美日韩在线观看 | 久久人人爽人人| 国产欧美日韩一区二区三区在线| 99精品国产99久久久久久福利| 免费成人黄色| 黄网站免费久久| 欧美中文字幕在线| 国产精品一区二区久久| 一本综合久久| 欧美另类在线播放| 91久久综合| 欧美 日韩 国产精品免费观看| 黄色成人片子| 久久久久综合| 国产亚洲女人久久久久毛片| 亚洲欧美久久久久一区二区三区| 欧美日韩一区二区在线视频| 日韩视频免费| 欧美激情一区二区三区在线视频 | 国产精品另类一区| 亚洲小少妇裸体bbw| 欧美日韩精品一区二区三区| 亚洲精品一品区二品区三品区| 麻豆久久婷婷| 亚洲国产精品福利| 久久天堂av综合合色| 国内视频一区| 久久婷婷久久| 在线成人小视频| 久久午夜电影| 亚洲国产视频a| 欧美国产日韩一二三区| 亚洲人成网站999久久久综合| 蜜臀91精品一区二区三区| 在线欧美日韩国产| 欧美激情按摩在线| 日韩网站在线| 欧美日韩中文在线| 亚洲一二三区在线观看| 国产精品美女午夜av| 午夜精品久久久久久99热软件| 国产精品欧美在线| 欧美在线视频免费| 在线观看日韩一区| 欧美国产日本韩| 一区二区三区日韩精品视频| 国产精品精品视频| 欧美在线观看视频一区二区三区| 国语自产精品视频在线看一大j8 | 国语自产精品视频在线看抢先版结局| 久久久久国产精品一区二区| 精品动漫3d一区二区三区免费版| 浪潮色综合久久天堂| 亚洲二区在线| 欧美精品一区在线| 亚洲一区二区三区四区五区黄| 国产精品―色哟哟| 久久国产主播精品| 亚洲国产精品久久精品怡红院| 欧美日韩国产在线观看| 亚洲欧美另类国产| 国产日韩三区| 麻豆成人在线观看| 在线视频亚洲欧美| 国产女人精品视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧洲美洲综合色网| 欧美日韩一区二区视频在线| 欧美一级专区| 亚洲国产精品久久久久久女王| 欧美日韩精品在线| 翔田千里一区二区| 亚洲国产精品一区| 国产精品啊啊啊| 久久精品视频亚洲| 亚洲欧洲日韩在线| 国产精品一区=区| 麻豆久久精品| 这里只有精品电影| 狠狠网亚洲精品| 欧美日韩国产麻豆| 久久精品99无色码中文字幕 | 亚洲国产一区二区三区在线播| 欧美日韩精品三区| 久久国产精品毛片| 亚洲精品一区二区三区福利| 国产精品伊人日日| 欧美高清hd18日本| 销魂美女一区二区三区视频在线| 亚洲国产精品久久人人爱蜜臀| 国产精品久久久久久影视| 久久午夜影视| 亚洲专区欧美专区| 亚洲国产精品视频一区| 国产精品婷婷午夜在线观看| 欧美成人午夜免费视在线看片| 午夜精品久久久久| 亚洲精品一区在线| 红桃视频国产精品| 国产精品进线69影院| 母乳一区在线观看| 翔田千里一区二区| 一本久道久久综合狠狠爱| 精品成人一区二区三区四区| 国产精品看片资源| 欧美日韩成人免费| 久久人人九九| 欧美在线你懂的| 亚洲一区二区影院| 亚洲精品系列| 狠狠色丁香久久综合频道| 国产精品露脸自拍| 欧美精品一区二| 狂野欧美激情性xxxx欧美| 亚洲欧美日韩天堂一区二区| 日韩亚洲欧美在线观看| 在线观看日韩www视频免费| 国产免费观看久久黄| 欧美日韩综合不卡| 欧美国产日韩一区| 久久亚洲一区| 久久精品视频在线看| 午夜免费日韩视频| 一区二区国产精品| 91久久精品一区| 黄色成人精品网站| 国产视频久久久久| 国产精品女主播在线观看| 欧美高潮视频| 麻豆精品网站| 麻豆av一区二区三区| 久久gogo国模裸体人体| 午夜国产欧美理论在线播放| 一本色道久久综合亚洲精品不| 亚洲国产精品99久久久久久久久| 黄色资源网久久资源365| 国产日韩免费| 国产欧美日韩另类一区| 国产精品欧美久久| 欧美视频在线观看视频极品| 欧美全黄视频| 欧美精品在线观看91| 欧美电影打屁股sp| 麻豆精品精华液| 久久夜色精品亚洲噜噜国产mv| 久久久久**毛片大全| 久久精品日产第一区二区| 久久国产婷婷国产香蕉| 久久都是精品| 久久久国产精品一区二区中文| 久久xxxx精品视频| 久久精品女人| 久久久久一区| 免费精品视频| 欧美黄色小视频| 欧美片在线播放| 欧美日韩国产综合一区二区| 欧美日产在线观看|