前端学习26 ES6 模板字符串(Template Literals)

模板字符串是ES6引入的一种新型字符串表示法,使用反引号( ` ) 包裹内容,相比传统字符串具有更强大的功能。

1.核心特性

  • 多行字符串:直接支持换行。
  • 字符串插值:使用 ${ 对象 } 嵌入变量和表达式。
  • 标签模板:可以自定义字符串处理函数。

1.1 基本语法

// 传统字符串
const name = 'Alice';
const greeting = 'Hello, ' + name + '!';

// 模板字符串
const greeting = `Hello, ${name}!`;

1.2 多行字符串处理

// ES5实现多行字符串
var message = '第一行\n' +
              '第二行\n' +
              '第三行';

//ES6新特性 可以直接换行
const message = `第一行
第二行
第三行`;

1.3 字符串插值

//基本插值
const name = 'Alice';
const age = 25;
console.log(`Name: ${name}, Age: ${age}`); // "Name: Alice, Age: 25"

//表达式计算
const a = 10;
const b = 20;
console.log(`Sum: ${a + b}`); // "Sum: 30"

//函数调用
function getAge() {
  return 25;
}
console.log(`Age: ${getAge()}`); // "Age: 25"

//嵌套模板
const isMember = true;
console.log(`Status: ${
  isMember ? `Member since ${2020}` : 'Not a member'
}`); // "Status: Member since 2020"

1.4 标签模板(Tagged Templates)

标签模板允许使用函数解析模板字符串,第一个参数是字符串数组,后续参数是插值表达式。

function tag(strings, ...values) {
  console.log(strings); // ["Hello ", "!"]
  console.log(values); // ["Alice"]
  return 'Processed string';
}

const name = 'Alice';
const result = tag`Hello ${name}!`;
// 当调用 tag 函数时:
// strings 参数接收模板字符串中的文本部分。
// values 参数接收模板字符串中的嵌入值。

1.5 特殊字符处理

//转义字符
console.log(`反引号: \` 美元符号: \${`); // "反引号: ` 美元符号: ${"

//原始字符串 使用String.raw 标签获取原始字符串(不处理转义字符)
const path = String.raw`C:\Development\project\files`;
console.log(path); // "C:\Development\project\files"

// 等同于
function raw(strings, ...values) {
  let result = strings.raw[0];
  for (let i = 0; i < values.length; i++) {
    result += values[i] + strings.raw[i + 1];
  }
  return result;
}

1.6 性能考虑

  • 静态字符串:对于纯静态字符串,模板字符串与普通字符串性能相当
  • 动态插值:频繁变化的插值内容可能影响性能,在极端性能敏感场景需测试
  • 标签模板:自定义处理会增加开销,但通常可忽略不计

1.7 相关实践

  • 优先使用模板字符串:替代所有字符串拼接场景
  • 复杂逻辑处理:对于复杂插值逻辑,考虑提前计算表达式
// 不推荐
console.log(`Result: ${calculateA() + calculateB() * complexCalculation()}`);

// 推荐
const result = calculateA() + calculateB() * complexCalculation();
console.log(`Result: ${result}`);

  • 多行缩进处理:使用.trim()消除不必要的缩进
function getHtml() {
  return `
    <div>
      <p>Content</p>
    </div>
  `.trim();
}

全部评论

相关推荐

评论
3
1
分享

创作者周榜

更多
牛客网
牛客企业服务