js模板字符串

js模板字符串文章目录定义语法形式模板字符串特征 反引号 占位符 标签 字符串插值示例模板嵌套带标签的模板字符串总结资料原文定义模板字面量 模板字符串 允许在其中嵌入表达式的字符串字面量属于字符串字面量允许将表达式嵌入其中 字符串插值 可以是多行字符串主要功能 字符串插值 使用混合常量 变量 字面量和表达式的字符串字面量构造新 String 值 语法形式单行简单字

资料与笔记

定义

模板字面量(模板字符串): 允许在其中嵌入表达式的字符串字面量

  • 属于字符串字面量
  • 允许将表达式嵌入其中(字符串插值)
  • 可以是多行字符串

主要功能:

​ 字符串插值(使用混合常量、变量、字面量和表达式的字符串字面量构造新 String值)


语法形式

  • 单行简单字符串
    ` string text` 
  • 多行简单字符串
    `string text line1 string text line2` 
  • 带占位符
    `string text ${expression} string text` 
  • 带标签
    tag`string text string text` 
  • 以上几种的混合
    tag `string text ${expression} string text` 

模板字符串特征(反引号,占位符,标签)

  • 反引号:
    • 普通字符串字面量: 用单引号或双引号标识
    • 模板字符串字面量: 用反引号(“)标识
    • 引号转义问题:
      • 普通字符串字面量内使用单双引号: 需要反斜杠\转义
      • 模板字符串内使用反引号:
        • 模板字符串嵌套: 无需转义
        • 其他: 需要反斜杠\转义
  • 占位符: 形如 ${expression}的语法结构

    ​ 占位符中表达式会和周围的文本一起被传递给一个默认的函数, 该函数负责将所有的部分连接起来,返回最终组合的新字符串的值.

  • 标签
    • 模板字符串若由表达式开头,该表达式被称为标签
    • 标签通常是一个函数(或者最终值为函数类型的复杂表达式)
    • 标签函数会在模板字符串处理完毕,形成最终输出之前被调用

      (各占位符表达式的值前后其他普通字符串 被当做参数传给该标签函数)


字符串插值示例

  • 不使用模板字符串:
    var a = 5; var b = 10; console.log('Fifteen is ' + (a + b) + ' and\nnot ' + (2 * a + b) + '.'); // "Fifteen is 15 and // not 20." 
  • 模板字符串
    var a = 5; var b = 10; console.log(`Fifteen is ${ 
              a + b} and not ${ 
              2 * a + b}.`); // "Fifteen is 15 and // not 20." 

模板嵌套

  • 用法: 在外层模板的占位符${}再用反引号使用模板字符串
    • 嵌套位置: 占位符${}内,而非占位符外,无需转义反引号
  • 理解: 相当于多次调用模板字符串的默认处理函数(图示)

    我们将模板字符串分割为不同两组:

    js模板字符串

    默认函数的功能图:

    在这里插入图片描述

  • 实例说明

    代码:

    var fullName = 'peter.Zhang'; var firstName = 'peter'; var lastName = 'Zhang'; var test1 = `I am ${ 
              fullName}`; var test2 = `I am ${ 
              `${ 
              firstName}.${ 
              lastName}`}`; 

    test1的执行过程示意图:

    在这里插入图片描述

    test2的执行过程示意图:

    在这里插入图片描述


带标签的模板字符串

  • 标签函数的传参
    • 第一个参数为一个字符串数组strings(普通字符串)
    • 其余的参数与表达式相关(各个同级占位符的值)

    按照前面我们对模板字符串的分割,传参情况是这样的:(假设标签函数名为tag)

    tag( [s1,s2,s3,…,sn+1], Ve1, Ve2, …, Ven )

    举例说明:

    var fullName = 'peterZhang'; var firstName = 'peter'; var lastName = 'Zhang'; var str = showArgs`My name is ${ 
               showArgs`${ 
               firstName}_${ 
               lastName}`}`; //函数定义区----------------------------------------------------------- function showArgs(){ 
              var args = arguments; console.log(args); } 

    注: 第二行最后一项为undefined是因为我们嵌套的内层标签函数没有返回任何值给外层标签函数使用, 因此外层函数取占位符的值为undefined.

  • 返回值的多样性

    ​ 标签函数不一定必须返回一个字符串(可以返回为其他类型, 或者像上例一样,不返回任何值)

    返回函数类型举例:

    function template(strings, ...keys) { 
              return ( function(...values) { 
              var dict = values[values.length - 1] || { 
             }; var result = [strings[0]]; keys.forEach(function(key, i) { 
              var value = Number.isInteger(key) ? values[key] : dict[key]; result.push(value, strings[i + 1]); }); return result.join(''); } ); } var t1Closure = template`${ 
               0}${ 
               1}${ 
               0}!`; t1Closure('Y', 'A'); // "YAY!" var t2Closure = template`${ 
               0} ${ 
               'foo'}!`; t2Closure('Hello', { 
             foo: 'World'}); // "Hello World!" 
  • 第一参数的raw属性(未求值替换的原始模板字符串)

    ​ 第一参数(保存所有普通字符串的数组)含有一个raw属性(数组也是对象,可以添加属性),他保存了未进行求值核替换的原模板字符串的原始值.

    function tag(strings) { 
              console.log(strings.raw[0]); } tag`string text line 1 \n string text line 2`; // logs "string text line 1 \n string text line 2" , // including the two characters '\' and 'n' 

总结

模板字符串是普通字符串处理的一类语法糖, 它使得一些字符串的操作更简洁,更加易读易于理解.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209524.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:02
下一篇 2026年3月19日 上午9:02


相关推荐

  • List转Map_三种不退转

    List转Map_三种不退转List转Map三种方法。

    2025年9月4日
    11
  • 旋转太极八卦

    旋转太极八卦太极八卦图,以同圆内的圆心为界,画出相等的两个阴阳鱼表示万物相互关系。阴鱼用黑色,阳鱼用白色,这是白天与黑夜的表示法。阳鱼的头部有个阴眼,阴鱼的头部有个阳眼,表示万物都在相互转化,互相渗透,阴中有阳,阳中有阴,阴阳相合,相生相克,即现代哲学中和矛盾对立统一规律表示法。哈哈,装了个逼。其实我就是想教大家用css3画出旋转太极八卦。仅此而已。实现效果如下图:Html的代码很简单,就一行…

    2022年5月13日
    49
  • mybatis异常invalid comparison: java.util.Date and java.lang.String

    mybatis异常invalid comparison: java.util.Date and java.lang.String开发中改动mapper文件后需要重新编译发布,由于工程比较大非常耗时,所以为方便快速测试干脆写了一个小java工程.工程中用到的dao,mapper和实体类都是从工程中拷出来的,数据库也是同一个.但是遇到一个比较奇怪的问题实体类中有一个属性privateDatecreateTime;对应该属性数据库中定义的是create_timedatetime

    2022年7月16日
    18
  • Claude电脑版 v1.1.381 最新版

    Claude电脑版 v1.1.381 最新版

    2026年3月13日
    1
  • md5加密规则[通俗易懂]

    md5加密规则[通俗易懂]关于MD5加密  MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:  MD5(tanajiya.tar.gz)=0ca175b9c0f726a831d895e269332461  这就是

    2022年7月16日
    19
  • GWAS分析中使用PCA校正群体分层

    GWAS分析中使用PCA校正群体分层欢迎关注 生信修炼手册 GWAS 通过分析 case control 组之间的差异来寻找与疾病关联的 SNP 位点 然而 case 和 control 两组之间 可能本身就存在一定的差异 会影响关联分析

    2026年2月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号