二: 字符串扩展 正则表达式扩展
2019-12-20 本文已影响0人
岁月静好_不负此生
前言
该部分为书籍 深入理解ES6 第二章(字符串与正则表达式)笔记
更好的 Unicode 支持
不了解, 暂不做了解
正则表达式的改动
暂不做了解
- 增加 u 标志
- 增加 y 标志
- 复制正则表达式
- flags 属性
字符串的其他改动
String.prototype原型上增加的方法
- 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.includes("x")); // false
console.log(msg.startsWith("o", 4)); // true
console.log(msg.endsWith("o", 8)); // true
console.log(msg.includes("o", 8)); // false
-
repeat()方法:接受一个参数作为字符串的重复次数, 返回一个将初始字符串重复指定次数的新字符串
//在需要产生缩进的地方会有用处 // indent 使用了一定数量的空格 var indent = " ".repeat(4), indentLevel = 0; // 每当你增加缩进 var newIndent = indent.repeat(++indentLevel);
模板字面量(``)
模板自卖能量是 ES6 针对 JS 直到 ES5 依然完全缺失的如下功能的回应:
- 多行字符串: 针对多行字符串的形式概念;
- 基本的字符串格式化: 将字符串部分替换为已存在的变量值得能力;
- HTML转义: 能转换字符串以便将其安全插入到 HTML 中的能力
模板字面量以一种新的方式解决了这些问题, 而并未给 JS 已有的字符串添加额外功能
特性一: 多行字符串
-
反引号之内的所有空白符都是字符串的一部分, 也可以使用换行符
let message = `Multiline string`; console.log(message); // "Multiline // string" console.log(message.length); // 31 // 也可以在模板字面量中使用 \n 来指示换行的插入位置 let message = `Multiline\nstring`; console.log(message); // "Multiline // string" console.log(message.length); // 16
特性二: 制造替换位
-
替换位由起始的
${
与结束的}
来界定之间允许放入任意的 JS表达式// 模板字面量能访问到作用域中任意的可访问变量, 作用域就是当前定义位置的作用域 let count = 10, price = 0.25, message = `${count} items cost $${(count * price).toFixed(2)}.`; console.log(message); // "10 items cost $2.50."
特性三: 标签化模板
-
一个模板标签( template tag )能对模板字面量进行转换并返回最终的字符串值,标签在模板的起始处被指定,即在第一个 ` 之前
可以通过这个来定制化模板字面量返回的字符串
let count = 10, price = 0.25, message = passthru`${count} items cost $${(count * price).toFixed(2)}.`; console.log(message); // "10 items cost $2.50." /* 函数的参数解析: 1. literals数组: * 包含在首个替换位之前的空字符串("") * 在首个替换位与第二个替换位之间的字符串(" items cost $); 第二个替换位之后的字符串("."); 2. 剩余参数(不定参数): * 第一个替换位 ${clunt} 的解释值 10, * 第二个替换位 ${ (count * price).toFixed(2) } 的解释值 2.50 * 如果还有替换位的话, 以此类推 */ 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; }
-
使用模板字面量中的原始值
使用内置的
String.raw()
标签, 可以访问字符在转义之前的形式let message1 = `Multiline\nstring`, message2 = String.raw`Multiline\nstring`; console.log(message1); // "Multiline // string" console.log(message2); // "Multiline\\nstring"