国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript基于replace+正則實現(xiàn)ES6的字符串模版功能

2024-05-06 15:18:02
字體:
供稿:網(wǎng)友

本文實例講述了JavaScript基于replace+正則實現(xiàn)ES6的字符串模版功能。分享給大家供大家參考,具體如下:

采用拼接字符串的形式,將 JSON 數(shù)據(jù)嵌入 HTML 中。開始時代碼量較少,暫時還可以接受。但當頁面結(jié)構(gòu)復雜起來后,其弱點開始變得無法忍受起來:

書寫不連貫。每寫一個變量就要斷一下,插入一個 + 和 “。十分容易出錯。

無法重用。HTML 片段都是離散化的數(shù)據(jù),難以對其中重復的部分進行提取。

無法很好地利用 標簽。這是 HTML5 中新增的一個標簽,標準極力推薦將 HTML 模板放入 標簽中,使代碼更簡潔。

replace+正則實現(xiàn)

項目剛開始用的數(shù)據(jù)拼接

function formatString() {    if (arguments.length === 0)      return null;    var str = arguments[0];    for (var i = 1; i < arguments.length; i++) {      var re = new RegExp('//{' + (i - 1) + '//}', 'gm');      str = str.replace(re, arguments[i]);    }    return str;},

第一個參數(shù)為需要渲染的數(shù)據(jù)模板,其他參數(shù)為數(shù)據(jù):

formatString('{0},My name is {1}', 'everyMan', '吳孔云')

這種后期維護較麻煩,一旦更改順序,都需要更改~~就跟函數(shù)需要接收一大串參數(shù)一樣,我們盡量寫成對象的形式,

var myObject = maker(f,l,m,c,s);//不建議寫法var myObject = maker({//建議寫法   first : f,   last: l,   state:s,   city:c});

在網(wǎng)上搜索看到一個例子,可以類似實現(xiàn)ES6的字符串模版形式,博客是一個高中生寫的,戳鏈接 。

function render(template, context) {  //被轉(zhuǎn)義的的分隔符 { 和 } 不應該被渲染,分隔符與變量之間允許有空白字符  var tokenReg = /(//)?/{([^/{/}//]+)(//)?/}/g;  return template.replace(tokenReg, function (word, slash1, token, slash2) {    //如果有轉(zhuǎn)義的/{或/}替換轉(zhuǎn)義字符    if (slash1 || slash2) {      return word.replace('//', '');    }    // 切割 token ,實現(xiàn)級聯(lián)的變量也可以展開    var variables = token.replace(//s/g, '').split('.');    var currentObject = context;    var i, length, variable;    for (i = 0, length = variables.length; i < length; ++i) {      variable = variables[i];      currentObject = currentObject[variable];      // 如果當前索引的對象不存在,則直接返回空字符串。      if (currentObject === undefined || currentObject === null) return '';    }    return currentObject;  })}String.prototype.render = function (context) {  return render(this, context);};"{greeting}! My name is { author.name }.".render({  greeting: "Hi",  author: {    name: "hsfzxjy"  }});// Hi! My name is hsfzxjy.

擴展:ES6字符串模版API

ES6引入了一種新型的字符串字面量語法,我們稱之為模板字符串(template strings)。除了使用反撇號字符 ` 代替普通字符串的引號 ' 或 ” 外,它們看起來與普通字符串并無二致。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 揭东县| 嵊州市| 昌宁县| 舒兰市| 拉萨市| 江陵县| 玉田县| 呈贡县| 泽库县| 阿城市| 永康市| 平山县| 文昌市| 安远县| 隆林| 屏山县| 铜陵市| 大港区| 临沧市| 闸北区| 商丘市| 泽库县| 同心县| 金阳县| 榆林市| 河源市| 中方县| 新邵县| 同仁县| 金沙县| 甘肃省| 九江市| 冀州市| 当阳市| 禄丰县| 汉源县| 商水县| 泰兴市| 灵山县| 石台县| 讷河市|