• React 重${}【ES6 引入了模板字符串解决这个问题】


    模板字符串

    传统的 JavaScript 语言,输出模板通常是这样写的

    $('#result').append(
      'There are ' + basket.count + ' ' +
      'items in your basket, ' +
      '' + basket.onSale +
      ' are on sale!'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面这种写法相当繁琐不方便,ES6 引入了模板字符串解决这个问题。

    $('#result').append(`
      There are ${basket.count} items
       in your basket, ${basket.onSale}
      are on sale!
    `);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    模板字符串(template string)是增强版的字符串

    模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

    // 普通字符串
    `In JavaScript '\n' is a line-feed.`
    
    // 多行字符串
    `In JavaScript this is
     not legal.`
    
    console.log(`string text line 1
    string text line 2`);
    
    // 字符串中嵌入变量
    let name = "Bob", time = "today";
    `Hello ${name}, how are you ${time}?`
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    模板字符串中需要使用反引号

    上面代码中的模板字符串,都是用反引号表示。如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。

    let greeting = `\`Yo\` World!`;
    
    • 1

    如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

    $('#list').html(`
    
    • first
    • second
    `.trim());
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    模板字符串中嵌入变量,需要将变量名写在${}之中。

    function authorize(user, action) {
      if (!user.hasPrivilege(action)) {
        throw new Error(
          // 传统写法为
          // 'User '
          // + user.name
          // + ' is not authorized to do '
          // + action
          // + '.'
          `User ${user.name} is not authorized to do ${action}.`);
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

    let x = 1;
    let y = 2;
    
    `${x} + ${y} = ${x + y}`
    // "1 + 2 = 3"
    
    `${x} + ${y * 2} = ${x + y * 2}`
    // "1 + 4 = 5"
    
    let obj = {x: 1, y: 2};
    `${obj.x + obj.y}`
    // "3"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    模板字符串之中还能调用函数。

    function fn() {
      return "Hello World";
    }
    
    `foo ${fn()} bar`
    // foo Hello World bar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。
    如果模板字符串中的变量没有声明,将报错。

    // 变量place没有声明
    let msg = `Hello, ${place}`;
    // 报错
    
    • 1
    • 2
    • 3

    由于模板字符串的大括号内部,就是执行 JavaScript 代码,因此如果大括号内部是一个字符串,将会原样输出。

    `Hello ${'World'}`
    // "Hello World"
    
    • 1
    • 2

    模板字符串甚至还能嵌套

    const tmpl = addrs => `
      
      ${addrs.map(addr => `
        
      `).join('')}
      
    ${addr.first}
    ${addr.last}
    `;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上面代码中,模板字符串的变量之中,又嵌入了另一个模板字符串,使用方法如下。

    const data = [
        { first: '', last: 'Bond' },
        { first: 'Lars', last: '' },
    ];
    
    console.log(tmpl(data));
    // 
    //
    //   
    //   
    //
    //   
    //   
    //
    // 
    Bond
    Lars
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    渗透测试-目录遍历漏洞
    YOLOv8改进RepVGG结构:简单但功能强大的卷积神经网络架构
    学习太极创客 — MQTT(四)服务端连接操作
    Plex踩坑——plex web无法找到媒体服务器
    conda虚拟环境总结与解读
    百度爬虫的工作原理解析
    云技术分享 | 快速构建 CodeWhisperer 代码生成服务,让 AI 辅助编程
    Java中的volatile为什么不能保证原子性
    霍尔传感器无法动态显示数值
    linux下system.img解包和打包(android rom修改)
  • 原文地址:https://blog.csdn.net/will5451/article/details/126010806