ES6标签模板

了解ES6中模板字符串的标签函数 模板字符串是可能是我们耳熟能详的一个ES6新特性,它可以允许我们在字符串中插入变量,还能够换行等等,确实使用起来非常地方便。然而,ES6还新增了一种主要用于和模板字符串配合使用的标签函数。 1.什么标签函数? 顾名思义,标签函数也是一种函数。这是一个很简单的标签函数声明: function tagFoo() { console.log('这是一个标签函数'); } 仔细观察一下,看看tagFoo和我们常用的普通函数有什么区别呢?是不是看不出区别呢?得出这个结论很正常,因为标签函数其实就是一 阅读详情

定义:当模板字符串紧跟在一个函数名后面的时候,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。
如果没有参数的话,那个普通的调用没什么区别,比如

alert`123`
// 等同于 (但是使用模板字符串传入的参数是一个数组,包含一个row属性。注1)
alert(123)

但是,如果模板字符串中带有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。

let a = 5;
let b = 10;

tag`Hello ${ a + b } world ${ a * b }`;
// 等同于
tag(['Hello ', ' world ', ''], 15, 50);

带有变量的模板字符串会被先处理成参数形式,再传入函数中。规则就是: 字符串中的非变量被拆成数组形式,变量作为值紧跟数组后面作为参数传入。
需要注意的是,入股有2个或多个参数相邻,那么其中会被算有一个空字符串,举个栗子:

let { log } = console;
let total = 30;
let msg = passthru`The total is ${total}${total}${total} (${total*1.05} with tax)`;

function passthru(literals) {
  let result = '';
  let i = 0;
  log(literals);   //  ["The total is ", "", "", " (", " with tax)"]
  while (i < literals.length) {
    result += literals[i++];
    if (i < arguments.length) {
      result += arguments[i];
    }
  }
  return result;
}

上述函数采用rest参数的写法如下:

function passthru(literals, ...values) {
  var output = "";
  for (var index = 0; index < values.length; index++) {
    output += literals[index] + values[index];
  }

  output += literals[index];
  return output;
}

这两种写法效果是一样的。因为相邻的变量中间有空字符串,所以变量的长度比字符串的长度少一。

“标签模板”的一个重要应用,就是过滤HTML字符串,防止用户输入恶意内容。通过过滤可以将字符串转码:

function SaferHTML(templateData) {
  let s = templateData[0];
  for (let i = 1; i < arguments.length; i++) {
    let arg = String(arguments[i]);

    // 在替换中转义特殊字符
    s += arg.replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;");

    // 不转义模板中的字符
    s += templateData[i];
  }
  return s;
}

var sender = '<script>alert("abc")</script>'; // 恶意代码
var message = SaferHTML`<p>${sender} has sent you a message.</p>`;

log(message)   //  <p>&lt;script&gt;alert("abc")&lt;/script&gt; has sent you a message.</p>

注1: row 属性指向一个数组,数组中保存的成员和传入的参数中的string一致,举个栗子:

tag`First line\nSecond line`

function tag(strings) {
  console.log(strings.raw[0]);
  // strings.raw[0] 为 "First line\\nSecond line"
  // 打印输出 "First line\nSecond line"
}

这里会将\n 转义,为了方便取得转义前的原始模板而设计的。

ES6模板字符串和标签模板的应用实例分析 主要介绍了ES6模板字符串和标签模板的应用,结合实例形式分析了ES6模板字符串和标签模板的功能、原理、用法及相关操作注意事项,需要的朋友可以参考下 立即下载

相关推荐

Ubuntu 解决WPS缺少宋体,微软雅黑等中文字体

这篇博客解决Ubuntu 18.04 无法使用中文字体的问题 问题描述

分享日常的学习,开展的项目,编写的软件,解决的问题等~ 1万+

ES6---标签模板

1、含义:模板字符串紧跟在函数名之后,该函数则被调用来处理这个模板字符串 alert`hello` // 相当于: alert(['hello']) 2、标签模板并不是模板,而是函数调用的一种方式,其中‘标签’就是函数,紧跟函数名后面的‘模板字符串’就是函数的参数 3、标签模板中模板字符串可以含有变量 let a = 222, b = 333 function fun (stringArr, value1, value2){ //把位于变量左右两边的字符提取出来组成数组,如果变量左右两

千里之行,始于足下! 1439

Pyradiomics 医学影像提取放射组学特征(下)

Pyradiomics 医学影像提取放射组学特征(下)

LetsonH的博客 1320

ES6知识点解析(二)

ES6知识点解析(二) 字符串模板基本使用 ​ 在ES6之前,如果我们想要将字符串和一些动态的变量(标识符)拼接到一起,是非常麻烦和丑陋的(ugly)。 ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接: 首先,我们会使用 `` 符号来编写字符串,称之为模板字符串; 其次,在模板字符串中,我们可以通过 ${expression} 来嵌入动态的内容; // ES6之前拼接字符串和其他标识符 const name = "why" const age = 18 const height = 1

酒客的博客 520

别光看Demo了!用UE5 Lyra框架快速搭建你的多人对战游戏原型(含完整配置流程)

本文详细介绍了如何利用UE5 Lyra框架快速搭建多人对战游戏原型,包含完整的配置流程和实战案例。Lyra作为可直接二次开发的游戏模板,内置了GAS技能系统、Enhanced Input输入控制等核心功能,大幅缩短开发周期。通过替换角色模型、调整武器数值和配置新地图规则,开发者可在48小时内完成科幻团队竞技游戏原型的搭建。

weixin_28717411的博客 457

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1852

es6中标签模板

之所以写这篇文章,是因为`标签模板`是一个很容易让人忽略的知识点

guizi0809的博客 1140

LeRobot 入门教程(十四)Meta-World 机器人多任务与元强化学习操作仿真基准平台

Meta-World是一个开源机器人操作模拟基准平台,专注于多任务与元强化学习研究。该平台提供50项多样化任务(MT50套件),采用标准化评估协议测试算法泛化能力。LeRobot平台支持Meta-World任务评估,提供预处理数据集和训练工具。用户可通过命令行快速训练SmolVLA策略,并评估模型在简单、中等、困难等不同难度任务上的表现。文章还提供了兼容性问题和实用技巧建议,如使用完整MT50任务集测试泛化能力、采用one-hot任务条件化等。这些资源为研究人员开展机器人多任务学习提供了标准化实验环境。

2506_90492529的博客 1022

es6字符串模板之标签化模板

我们经常搞前端开发工作的都会用到。它可以保留字符串换行格式,还能接受变量。这个给前端的字符串拼接带来了非常大的方便。但是还有一种用法可能是我们平时还是没有怎么用到的。

小漠007的专栏 1851

Win7没有usb驱动怎么办?Win7没有usb驱动的解决方法

之后发现USB驱动不能够使用,那么碰到这种问题应该怎么办呢?下面就和小编一起来看看有什么解决方法吧。1、我们先使用驱动管理软件进行扫描安装驱动,如果安装后,还不行的话,我们就要进入到控制面板。我们经常会因为各种原因来更新电脑的系统,不过有一些小伙伴在重装完。4、点击usb选项后,找到显示感叹号和问号的usb驱动。2、在控制面板中,点击硬件声音,选择设备管理器。3、进入到设备管理器的页面,找到USB控制选项。6、如果计算机已经联网,我们可以在线更新驱动。5、然后鼠标右键点击更新驱动。

2401_88800025的博客 964

码农新宠大对决:GitHub Copilot、通义灵码和CodeLlama谁主沉浮?

本文对三款主流AI编程工具GitHub Copilot、通义灵码和CodeLlama进行了全面对比分析。GitHub Copilot在多语言支持和代码质量上表现突出;通义灵码在中文理解和阿里云生态集成方面优势明显;CodeLlama则以开源可定制见长。文章从代码生成、理解能力、多语言支持、使用体验等维度展开评测,并结合实际案例说明不同开发者群体的适用选择。建议新手可优先考虑通义灵码,经验开发者适合GitHub Copilot,而有定制需求的企业团队则可选择CodeLlama。随着AI技术发展,这些工具将持续

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 676

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

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

代码改变世界 488

Unitree G1仿人机器人协同搬箱:从仿真搭建到多机协同部署完整指南

Unitree G1仿人机器人协同搬箱技术方案摘要 本文提供了一套完整的Unitree G1人形机器人协同搬箱解决方案,涵盖从仿真环境搭建到多机协同部署的全流程。核心内容包括: 双仿真环境配置:同时搭建Gazebo+ROS Noetic基础仿真环境与Isaac Gym+Mujoco高性能RL训练环境,支持Sim2Sim迁移验证 训练框架搭建:详细配置unitree_rl_gym框架,提供PPO算法定制化训练流程和参数优化方案 数据集应用:整合宇树开源真机数据集(UnifoLM-WBT-Dataset)~~~

huanghm88的专栏 476

ES6 标签模板与模板字符串

标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的是函数,紧跟在后面的模板字符串就是它的参数。

zhanglir333的博客 2907

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ES6 标签模板(Tagged templates)

ES6标签模板(Tagged templates) 一、简介 标签模板允许你用一个方法去解析模板字符串。该方法形参的第一个参数是一个字符串数组,后面的几个参数是你传入的用${}表示的其他变量。该方法可以返回经过你处理过的字符串或者另外一个方法。 这个解析模板字符串的方法的名字是自定义的。 二、代码 1.以下是标签模板的基本使用 var person = 'Mike'; var age = 28; ...

qq_21522331的博客 1074

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ES6 标签模板:前端框架的灵活利器

摘要: ES6模板字符串标签(Tagged Template Literals)通过自定义标签函数增强了字符串处理的灵活性,广泛应用于React(如Styled-Components样式动态绑定)和Lit(如高效DOM模板渲染)。其核心优势包括代码可读性、动态内容处理及安全性(如XSS防护)。示例展示了标签函数实现HTML转义逻辑。虽然现代浏览器普遍支持,旧环境需通过Babel转译或Polyfill(如core-js)确保兼容性。该特性还被扩展用于国际化、GraphQL查询等场景,体现了其在前端开发中的强大

前端结城的博客 1197

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

es6模板字符串里用html标签,为ES6模板字符串计算标签函数

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。这篇博客描述了你可以通过函数为ES6模板字符串做些什么从而获取返回值。对于一篇针对模板字符串的介绍来说,标记的模板字符串和函数需要在《探索ES6》中查询模板字符串章节1.通过模板字符串获取返回值在JavaScript中获取一个值最普遍的方法就是在括号中加上参数。在ES6中,你可以通过模板字符串更多地获取返回...

weixin_39524636的博客 880

字符show,ES6模板字符串与标签化模板

ES6字符串骚包点 模板字符串 标签化模板 模板字符串带过,主要解释标签化模板。 模板字符串 这个大家应该都用过,或许这个名字你不熟悉吧,如下: let str = ` <div> <button>打我啊,笨蛋</button> </div> ` /** " * <div> * <button&g...

污斑兔的博客。 543

ES6 JavaScript 模板字符串與標籤模板

ES6 JavaScript 模板字符串與標籤模板前言正文模板字符串(template-literals)的基本使用在模板字符串中嵌入變數進階:標籤模板(tagged template)結語 前言 在ES6中多了一個很好用的模板字符串(template-literals)。我們常常會需要在js中「放入HTML」,或者要在一個字符串中嵌入一些變數,又或者,需要很長的字串,且包含換行。這時候,模板字符串會是很棒的工具! 正文 模板字符串(template-literals)的基本使用 比起一般的字符串我們用的是

weixin_46803507的博客 398

ES6模板字符串之标签模板的拓展

借用网上的一道题目来进行解析, function getPersonInfo(one, two, three) { console.log(one); console.log(two); console.log(three); } const person = "Lydia"; const age = 21; getPersonInfo`${person} is ${a...

weixin_45077505的博客 2149

ES6带标签的模板字符串

ES6带标签的模板字符串 定义一个函数,函数的第一个参数strings接收到的是一个数组,这个数组是myTagFunc后面紧接着的模板字符串按照表达式(${} )分割后得到的数组 该函数还可以接收到所有在模板字符串中出现的表达式的返回值,即myTagFunc可以接收到${name}、${gender} 这个函数内部的返回值,就是带标签的模板字符串的返回值 正常使用应该有的返回值 带标签的模板字符串的应用 标签函数的作用实际就是对模板字符串进行加工,可以在函数内部处理一些业务逻辑、文本翻译成中文 o

小卡酷谋的博客 375

通过 es6的标签模板字符串,调用函数

通过 es6的标签模板字符串,调用函数

pig_ning的博客 262

es6(基础五) 模板字符串与标签模板

一、模板字符串       格式:``        加入内容:`${变量名称...}`        传统的输出模板如下{ var ul = document.getElementById("#uls"); var str = ''; var a = '这是一个a'; var p = '这是一个p'; str+='&lt;li style="background:red"&gt;'; ...

u011705725的博客 2707

ES6-模板字符串(标签模板-XSS攻击)

1. 模板字符串 保存字符串中的格式 使用变量/常量或者表达式/方法 2. 标签模板 函数调用的特殊形式 使用形式 过滤HTML字符串 防XSS攻击 1. 模板字符串 ES6中引入的新的声明字符串的方式 xxxxx ES5声明字符串的方式 '' 和 "" 保存字符串中的格式 可以在内容中出现换行符 var str = ` <div>1</div> <div>2</div> <p>3</p&..

爱代码的小海的博客 693

es6html模板,ES6模板字符串和标签模板的应用实例分析

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

weixin_35305499的博客 357
上一篇: ES6 的一些新函数(不定时更新)
下一篇: ES6 函数默认值与作用域
Aaron灬
博客等级 码龄9年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值