• 深入标签模板字面量


    模板字面量是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';
    let html = sanitized`
    ${comment}
    `
    ; console.log(html); //'
    Evil comment
    '

    __EOF__

  • 本文作者: 墨戈
  • 本文链接: https://www.cnblogs.com/mogebw/p/16852719.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    java毕设项目网上图书分享系统(附源码)
    vue课程80 演示如何利用cli创建项目
    二叉树的(前,中,后序)遍历
    Monkey测试
    FPGA序列脉冲波形发生器
    Niantic CEO:AR有望取代二维码,理想的AR眼镜还需3-5年
    硅磷晶罐的使用注意事项有哪些?
    【已解决】no module named ‘backdoor‘
    如何在响应头中防治xss
    期货公司开户后续会有哪些服务?
  • 原文地址:https://www.cnblogs.com/mogebw/p/16852719.html