首页 > 其他分享 >深入标签模板字面量

深入标签模板字面量

时间:2022-11-02 22:11:08浏览次数:50  
标签:index 字面 标签 tag let 模板

模板字面量是ES6引入的一个新特性,它的出现扩展了字符串的可用性,使得拼接字符串和变量变得更加方便和全面。但它不仅限于拼接字符串和变量。还可以用于进行特殊函数调用,ES6将这一功能定义为标签模板字面量。

我们看一下代码:

function tag(parts, ...values) {
    return parts.reduce(
        (pre, cur, index) => pre + values[index - 1] + cur);
}

let name = 'World';
let language = 'JavaScript'
let text = tag`Hello, ${name}. This is ${language}!`
console.log(text);

运行以上代码,会出现什么结果呢,你或许想到了,控制台会打印'Hello, World. This is JavaScript!'。但你可能会感到疑惑,以上代码的运行机制是怎样的呢。下面我们就来深入了解一下标签模板字面量的运行机制。

首先,我们可以把标签模板字面量分为两部分:标签模板字面量。如你所见,上述代码中的tag就是一个标签,即你要调用的函数。而紧跟的模板字面量就是被tag函数将要解析的传入参数。实际上,tag会将模板字面量如下解析:

tag(['Hello, ', '. This is ', '!'], 'Maurice', 'thrilled') {
...
}

终于明白了!原来标签模板字面量是这样的运行机制。首先解析所有模板字面量中的非插值内容,构成一个列表参数;然后将所有插值内容解析出来,处理为独立的参数。

标签模板还有一个更有用的用法,即可以用它来自动确保模板中插入表达式的安全性。假设有一个模板,其中所有表达式都是用户输入的内容,我们可以定义一个filter函数来移除 HTML 标签和类似的危害,从而阻止用户在网站中注入恶意的 HTML,防止跨域脚本(XSS)攻击:

function sanitized(parts, ...values) {
    return parts.reduce((all, part, index) =>
        all + sanitize(values[index - 1]) + part);
}
let comment = 'Evil comment<iframe src="http://evil.corp"></iframe>';
let html = sanitized`<div>${comment}</div>`;
console.log(html);
//'<div>Evil comment</div>'

标签:index,字面,标签,tag,let,模板
From: https://www.cnblogs.com/mogebw/p/16852719.html

相关文章

  • 大学课程论文Latex模板
    效果展示Latex代码\documentclass[a4paper,UTF8,10pt]{ctexart}\usepackage{xeCJK,amsmath,paralist,enumerate,booktabs,multirow,graphicx,float,subfig,setspace,l......
  • 大学实验报告Latex模板
    效果展示Latex代码\documentclass[12pt,a4paper,oneside,UTF8]{ctexart}%设置页边距\usepackage[left=1.91cm,right=1.91cm,top=2.54cm,bottom=2.54cm]{geometry}%需......
  • 给表格增加行间距的同时支持合并单元格,但不破坏 table 语义化标签结构的简单方法
    背景需要实现一个非典型的表格:表头下方,以及部分tr下方(将多个tr视作一个列表项,最后一个tr与下一个列表项之间)需要添加空白,但不能破坏table、thead、tbody、th、tr......
  • Java-抽象模板模式
    什么是模板模式?定义程序的骨架,而将一些步骤延迟到子类中。模板模式使得子类可以不需要改变程序的结构即可重定义该程序的某些特定步骤。通俗的讲,模......
  • 增加vue模板快捷键,以及方法注释快捷键的总结
    一、Vscode配置1、进入首选项=>用户配置代码片段=>javascript{ "Printtozhushi":{ "prefix":"zhushi", "body":[ "<!--", "*@Description:$0", "*@Auth......
  • 设计模式十一(空对象模式,策略模式、模板模式)
    在空对象模式(NullObjectPattern)中,一个空对象取代NULL对象实例的检查。Null对象不是检查空值,而是反应一个不做任何动作的关系。这样的Null对象也可以在数据不可用的......
  • 树莓派搭建WordPress博客:更换WordPress主体模板 8/10
    上一篇​树莓派搭建WordPress博客:安装相对URL插件、修改wp-config.php文件7/10​按照前面几篇文章的介绍,我们树莓派上的WordPress站点已经基本成型。但想要让我们的网站有......
  • html常用标签
    1.h1-h6文本标题(自带加粗、间距、独占一行)2.段落文本<p></p>(段落与段落之间有间距)3.换行<br>(强制换行)4.水平线<hr>(空标记)   hr属性:noshade(阴影)、color(颜色),width(......
  • Excel竟然也有模板,解决了90%的excel数据展示问题
    如下一份平民版的电影排期时间表,能更有哔——格一点吗?这样分享出去是不是更有范儿了?那么我们是怎么制作出来的呢?接下来我们一起学习并熟悉她:Excel竟然也有模板,原来你都不知......
  • .gitignore模板
    #customBiomind-Utils/*.log.*temp/*.tar*.zip*_temp/Miniconda3-4.5.12-Linux-x86_64.sh*.code-workspace*.built_tempfile*.ndpi*.idea.vscode/node_mod......