ES6 字符串

识别子字符串的方法
  • includes()方法,在给定文本存在于字符串中的任意位置时会返回 true,否则返回 false;
  • startsWith()方法,在给定文本出现在字符串起始处时返回 true,否则返回false;
  • endsWith()方法,在给定文本出现在字符串结尾处时返回 true,否则返回false 。

每个方法都接受两个参数:需要搜索的文本,以及可选的搜索起始位置索引。当提供了第二个参数时, includes() 与 startsWith() 方法会从该索引位置开始尝试匹配;而
endsWith() 方法会将字符串长度减去该参数,以此为起点开始尝试匹配。

var msg = "Hello world!";
console.log(msg.startsWith("Hello"));  //true
console.log(msg.endsWith("!"));  //true
console.log(msg.includes("o"));  //true
console.log(msg.startsWith("o"));  //false
console.log(msg.endsWith("world!"));  //true
console.log(msg.startsWith("o", 4));  //true
console.log(msg.endsWith("o", 8));  //true
repeat() 方法

接受一个参数作为字符串的重复次数,返回一个将初始字符串重复指定次数的新字符串。

console.log("x".repeat(3));  // "xxx"
console.log("hello".repeat(2));  // "hellohello"
模板字面量

模板字面量的最简单语法,是使用反引号( ` )来包裹普通字符串,而不是用双引号或单引号。
模板字面量以一种新的方式解决了这些问题,而并未给 JS 已有的字符串添加额外功能。

  • 多行字符串:针对多行字符串的形式概念;
  • 基本的字符串格式化:将字符串部分替换为已存在的变量值的能力;
  • HTML 转义:能转换字符串以便将其安全插入到 HTML 中的能力。
制造替换位

替换位由起始的 ${ 与结束的 } 来界定,之间允许放入任意的 JS 表达式。

let name = "Nicholas", message = `Hello, ${`my name is ${ name }`;
标签化模板
let message = tag`Hello world`;

一个标签( tag )仅是一个函数,它被调用时接收需要处理的模板字面量数据。标签所接收的数据被划分为独立片段,并且必须将它们组合起来以创建结果。第一个参数是个数组,包含被 JS 解释过的字面量字符串,随后的参数是每个替换位的解释值。

function tag(literals, ...substitutions) {
// 返回一个字符串
}

举个栗子(理解传递给标签的是什么参数)

let count = 10, price = 0.25, message = passthru`${count} items cost $${(count * price).toFixed(2)}.`;

如果你拥有一个名为passthru()的函数,该函数将会接收到三个参数。首先是一个literals数组,包含如下元素:

  • 在首个替换位之前的空字符串("");
  • 首个替换位与第二个替换位之间的字符串(" items cost $");
  • 第二个替换位之后的字符串(".")。

接下来的参数会是10,也就是count变量的解释值,它也会成为substitutions数组的第一个元素。最后一个参数则会是"2.50",即(count * price).toFixed(2)的解释值,并且会是substitutions数组的第二个元素。
需要注意 literals 的第一个元素是空字符串,以确保 literals[0] 总是字符串的起始部 分,正如 literals[literals.length - 1] 总是字符串的结尾部分。同时替换位的元素数量也总是比字面量元素少 1 ,意味着表达式 substitutions.length === literals.length - 1 的值总是 true 。

可以像下例这样交替使用两个数组中的值来模拟模板字面量的默认行为:

function passthru(literals, ...substitutions) {
    let result = "";
    // 仅使用 substitution 的元素数量来进行循环
    for (let i = 0; i < substitutions.length; i++) {
        result += literals[i];
        result += substitutions[i];
    }
    // 添加最后一个字面量
    result += literals[literals.length - 1];
    return result;
}

let count = 10, price = 0.25,

推荐阅读更多精彩内容