ES6语法实现模板编译

Colibri:不到6KB的轻量级前端组件库,小而能打的技术解析 在前端工具链日益臃肿的今天,轻量级前端框架逐渐成为中小型项目的新选择。Colibri是一款以极简主义为核心的轻量级前端UI库,核心代码压缩后不足6KB,无第三方运行时依赖。它基于原生DOM操作实现响应式数据绑定,通过Proxy代理简化状态管理,并提供了完整的组件生命周期管理机制。其设计理念强调回归本质,用最精简的API覆盖日常开发的高频需求,在SEO友好性和构建体积上具有显著优势。适用于企业官网、活动页、内容型站点等对加载速度敏感的场景。本文深入拆解了Colibri的模板编译、响应式更新、组件生命周期三大核 阅读详情

ES6语法实现模板编译

基础字符串模板

var template = `
<ul>
  <% for(var i=0; i < data.supplies.length; i++) { %>
    <li><%= data.supplies[i] %></li>
  <% } %>
</ul>
`;

思路:怎么编译这个模板字符串呢?根本原理可以用ES5语法的循环拼接字符串,这里设置这个循环拼接函数为echo()
将其转换为JavaScript表达式字符串

echo('<ul>');
for(var i=0; i < data.supplies.length; i++) {
  echo('<li>');
  echo(data.supplies[i]);
  echo('</li>');
};
echo('</ul>');

用正则来匹配将基础字符串模板替换为想要的字符串模板

var evalExpr = /<%=(.+?)%>/g;
var expr = /<%([\s\S]+?)%>/g;

template = template
  .replace(evalExpr, '`); \n  echo( $1 ); \n  echo(`')
  .replace(expr, '`); \n $1 \n  echo(`');

template = 'echo(`' + template + '`);';

然后,将template封装在一个函数里面返回,就可以了。

var script =
`(function parse(data){
  var output = "";

  function echo(html){
    output += html;
  }

  ${ template }

  return output;
})`;

return script;

注意:这里用到了ES6语法的字符串模板属性${ template },在模板中可以运行函数和使用变量
最后,将上面的内容拼装成一个模板编译函数compile。

var template = `
<ul>
  <% for(var i=0; i < data.supplies.length; i++) { %>
    <li><%= data.supplies[i] %></li>
  <% } %>
</ul>
`;
function compile(template){
  var evalExpr = /<%=(.+?)%>/g;
  var expr = /<%([\s\S]+?)%>/g;

  template = template
    .replace(evalExpr, '`); \n  echo( $1 ); \n  echo(`')
    .replace(expr, '`); \n $1 \n  echo(`');

  template = 'echo(`' + template + '`);';

  var script =
  `(function parse(data){
    var output = "";

    function echo(html){
      output += html;
    }

    ${ template }

    return output;
  })`;

  return script;
}
var parse = eval(compile(template));
div.innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });

编译后输出

<ul>
    <li>broom</li>
    <li>mop</li>
    <li>cleaner</li>
</ul>
ES6新语法快速入门学习教程 什么是ES6?   ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。 ECMAScript和JavaScript到底是什么关系?很多初学者会感到困惑,简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是ECMAScript的实现。 1996年11月,JavaScript的创造者Netsc 阅读详情

相关推荐

ES6 语法精粹简读

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,在 2015 年 6 月正式发布。目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

skysys的研究小屋 1373

ES6-模板编译(解释正则表达式及模板字符串变化)

通过模板字符串生成正式模板。 模板字符串: var template = ` <ul> <% for(var i = 0; i < data.supplies.length; i++) { %> <li><%= data.supplies[i] %></li> <% } %> </ul> `; 该模板使用 <%...%> 防止 JavaScript 代码,使用 &lt

waitti的博客 574

JavaScript ES6到ES11核心语法全面学习与实战

在配置管理中,使用const可防止意外修改:// 错误尝试// 虽然不会报错,但违反约定// 更安全的做法});// 或整体冻结});使对象浅层不可变,适合用于配置项、枚举、状态常量等。

weixin_42590539的博客 730

ES6模板字符串编译示例

let template = ` `; function compile(template){ const evalExpr = //g; const expr = //g; template = template .replace(evalExpr, '`); \n echo( $1 ); \n echo(`') .replace(ex

Rey 1287

html-template-tag:-用于编译HTML模板字符串的ES6标记模板

html-template-tag ES6带标签的模板,用于编译HTML模板字符串。 安装 该软件包通过npm分发: npm install html-template-tag 用法 字符串插值 此模块的核心只是执行简单的ES6字符串插值。 var html = require ( "html-template-tag" ) ; // - or - import { html } from "html-template-tag"; var name = `Antonio` ; var string = html `Hello, ${ name } !` ; // "Hello, Antonio!" 但是,它可以转义HTML特殊字符,而不会在循环中使用它! var html = require ( "html-template-tag" ) ; // - or - import {

2026年5月典型AI应用落地

2026年5月AI应用全面进入商用化阶段,呈现三大特征:产业端深度渗透核心业务场景,如法律领域AI合同处理系统完成8500万元项目;消费端实现规模普及,京东618全场景AI化,智能家居产品涌现;基础设施层面运营商推出词元套餐降低使用门槛。政策法规与国际合作同步推进,日本通过首部AI专项法律,中国举办多场产业对接会。AI应用从技术验证转向实效产出,进入精算回报的成熟期。

AI_Encyc的博客 2630

ES6:模板字符串

本博客版权归本人和饥人谷所有,转载需说明来源内容转载自阮一峰老师的ES6入门1.基本用法传统的JavaScript语言,输出模板通常是这样写的。$('#result').append( 'There are &lt;b&gt;' + basket.count + '&lt;/b&gt; ' + 'items in your basket, ' + '&lt;em&gt;' + bask...

HansExploration的博客 621

Cadence Sigrity PowerSI实战:从.brd到S参数提取的完整避坑指南

本文详细介绍了使用Cadence Sigrity PowerSI进行信号完整性分析的完整流程,从.brd文件预处理到S参数提取的关键技巧。通过实战案例和避坑指南,帮助工程师高效解决高速PCB设计中的信号质量问题,提升仿真精度和设计效率。

carrot的博客 694

ES6 入门教程 4 字符串的扩展 4.6 实例:模板编译 & 4.7 标签模板 & 4.8 模板字符串的限制

ES6 入门教程 4 字符串的扩展 4.6 实例:模板编译 & 4.7 标签模板 & 4.8 模板字符串的限制

代码改变世界 488

Autodesk全家桶:从AutoCAD到Maya,设计师必备的7款神器全解析

本文全面解析Autodesk全家桶中的7款设计师必备软件,包括AutoCAD、Revit、Inventor、Fusion 360、Maya和3ds Max等。从二维制图到三维建模,从建筑信息模型(BIM)到影视动画制作,这些工具在工程设计、建筑可视化和数字创意领域展现出强大的协同效应。通过实战案例展示如何整合工作流,显著提升设计效率与项目质量。

weixin_29237635的博客 460

Cyclone DDS背景技术

DDSI标准与DDS 1.2和1.4标准密切相关,DDSI中的实体与DCPS中的实体之间有明确的对应关系。但是,这种对应关系不是一一对应的。 此处,仅仅对DDSI规范的概念进行描述,暂不涉及Eclipse Cyclone DDS实现的细节。DDSI规范的概念将帮助对互操作性interoperability感兴趣的技术人员了解规范的外延边界和Eclipse Cyclone DDS实现的开始。

pony12的专栏 948

字符串模板中怎么写html标签,ES6模板字符串和标签模板的应用实例分析

本文实例讲述了ES6模板字符串和标签模板的应用。分享给大家供大家参考,具体如下:ES6 中对字符串进行了扩展,而模板字符串就是一个非常实用的方式,可以在html中实现与变量和方法的混编之前我们手动拼接字符串的方式let hello = 'Hello';let html = '' +''+ hello +'' +'';console.log(html); // HelloES6中使用模板字符串来优化...

weixin_42451196的博客 4160

MATLAB算法实战应用案例精讲-【数模应用】校准曲线(附MATLAB、python和R语言代码实现)

模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。

qq_36130719的博客 557

ES6 入门简介

本教程我们学习 ES6 的基础知识,ES6 是 ECMAScript6 的简称,是2015年6月正式发布的 JavaScript 语言的标准,正式命名为 ECMAScript 2015,它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只是实现了 ES6 的部分特性和功能。 EC

ivenqin的博客 252

【OD统一考试(B卷)】比赛的冠亚季军,Python 解答

比赛的规则是 0 号和 1 号比赛,2 号和 3 号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮,实力值大的获胜,实力值相等的情况,id 小的情况下获胜,轮空的直接进入下一轮。第一轮比赛,id 为 0 实力值为 2 的运动员和 id 为 1 实力值为 3 的运动员比赛, 1 号胜出进入下一轮争夺冠亚军,id 为 2 的运动员和 id 为 3 的运动员比赛,3 号胜出进入下一轮争夺冠亚军;2 号与 0 号,比赛进行季军的争夺,2 号实力值为 4,0 号实力值 2,故 2 号胜出,得季军。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

【数据集】全球陆地表面反照率Albedo

【数据集】全球陆地表面反照率Albedo

WW、forever的博客 1453

webpack搭建vue项目,实现脚手架功能

webpack搭建vue项目,实现脚手架功能 本文基于node.js开发环境,安装完node之后新建项目,通过webpack配置,实现vue-cli脚手架功能 对于刚刚接触编程的人来说,最难的可能并不是学习一种新语法或者框架,而是编程思维,这种思维在调试的时候显得尤为重要,拥有良好的编程习惯和思维能力可以大幅度提高调试效率。而编程思维的培养往往需...

唐吉sir 392

Fastgpt本地使用Docker Compose 快速部署

修改文件,并执行再执行d重起容器。具体配置,参考配置详解。可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。进入 FastGPT 容器,可以通过ls data查看目录下是否成功挂载文件。可通过查看配置文件。可能不生效的原因挂载目录不正确配置文件不正确,日志中会提示invalid json,配置文件需要是标准的 JSON 文件。

洛阳泰山的博客 1633

ES6 的一些新特性

方式,ES6 也 引入了新的数据类型 symbol,新的数据结构 set 和 map,symbol 可以通过。ES6 在变量的声明和定义方面增加了 let、const 声明变量,有局部变量的概念,赋值中。模块化:其模块功能主要有两个命令构成,export 和 import,export 命令用于规定模块的。了实现 Class 和模块,通过 Class 可以更好的面向对象编程,使用模块加载方便模块化编。些方法,如字符串方面的模板字符串、函数方面的默认参数、对象方面属性的简洁表达。

first_hands的博客 126

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TypeScript 编译 ES6+ 语法到兼容的 JavaScript介绍

ES6+语法指ECMAScript 2015及后续版本引入的新特性。TypeScript通过编译器将这些现代语法转换为兼容ES5的代码。主要特性包括:ES6的类、模块、箭头函数、模板字符串、解构赋值等;ES7的数组includes和指数运算符;ES8的async/await;ES9的异步迭代和对象展开;ES10的数组flat方法;ES11的可选链和空值合并;ES12的私有字段;ES13的顶层await;ES14的数组拷贝方法等。TypeScript处理这些特性时,部分需要polyfill支持,特别是依赖运行

漫谈网络 1837

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ES6语法

ECMAScript是浏览器脚本语言的规范,基于javascript来制定的。为什么会出现这个规范呢?

weixin_62789590的博客 1445

【前端之ES6语法】

ECMA2015年推出的ES6新语法,支持更高级的写法!

ypykip博客 614

html 模板字符串,ES6:模板字符串

标签: 模板字符串 JavaScript ES6 前端 web本博客版权归本人和饥人谷所有,转载需说明来源内容转载自阮一峰老师的ES6入门1.基本用法传统的JavaScript语言,输出模板通常是这样写的。$('#result').append('There are ' + basket.count + ' ' +'items in your basket, ' +'' + basket.onSa...

weixin_32280593的博客 3510

ES6中的class是如何实现的?(附Babel编译的ES5代码详解)

序言 这篇文章主要讲解面试某大厂遇到的一个问题 - ES6中的class语法的实现? ECMAScript 6 实现了class,class是一个语法糖,使得js的编码更清晰、更人性化、风格更接近面向对象的感觉;也使 IDE 、编译期类型检查器、代码风格检查器等工具更方便地检测代码语法,做静态分析。同样的,这给没有类就缺点什么的软件开发工程师一个更低的门槛去接触js。 ES6 class 的 ES...

weixin_34413103的博客 738

ES6之什么是模板字符串?

我们为什么需要模板? 在生活中,我们去银行签一些单子,或者生活中写一些请假条,我们都会有一个模板进行参照,哪里哪里需要怎么填写,哪里自由发挥。就是一种格式的提现。在我们前端中,这个模版又是什么样的概念呢? 模板这个概念起于浏览器页面初期。这个时候的页面是怎么形成的呢?并不是大家现在所学的这个样子(html+css+js),因为那个时候还没有 js,最初期的页面都是基本的 html 构成,用于学...

weixin_40851188的博客 2766

ES6 语法

ES6 语法 本章主要讲解工作中最常用的 ES6 语法,包括 Module Class Promise 等语法,还会介绍使用 babel webpack rollup 来搭建 ES6 编译环境。 ES6 使用 开发环境已经普及使用 浏览器环境却支持不好( 需要开发环境编译 ) 内容很多,重点了解常用语法 面试:开发环境的使用 + 重点语法的掌握 问题 ES6 模块化如何使用,开发环境...

周琛的点滴记录~ 320
上一篇: webpack
下一篇: Atom常用快捷键整理
chentian888
博客等级 码龄11年 16粉丝 76原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值