ECMAScript 6 学习笔记:字符串扩展
栏目: JavaScript · 发布时间: 5年前
内容简介:在 ES5 中,仅允许表示由此,JavaScript 共有6中表示字符的方式:除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。
字符的 Unicode 表示法
在 ES5 中,仅允许表示 \u0000
~ \uFFFF
之间的字符,一旦超出这个范围就必须要用两个双字节的形式表示,而在 ES6 中,只需要把 Unicode 放入大括号中,就能正确解读。
"\uD842\uDFB7" // " " "\u20BB7" // " 7",只能解析为 "\u20BB" 和 7 "\u{20BB7}" // " "
由此,JavaScript 共有6中表示字符的方式:
'\z' // 'z' '\172' // 'z' '\x7A' // 'z' '\u007A' // 'z' '\u{7A}' // 'z'
字符串的遍历器
除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。
for (let char of 'hello') { console.log(char) }
字符串搜索
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
这三个方法有两个参数,参数一表示需要匹配的字符串,参数二表示开始搜索的位置。
let s = 'Hello world!'; s.startsWith('Hello') // true s.endsWith('!') // true s.includes('o') // true s.startsWith('world', 6) // true s.endsWith('Hello', 5) // true s.includes('Hello', 6) // false
字符串补充
- repeat():将源字符串重复 n 次
- padStart():头部补全
- padEnd():尾部补全
'x'.repeat(3) // "xxx" 'x'.padStart(5, '0') // '0000x' 'x'.padEnd(5, '0') // 'x0000'
模板字符串
模板使用反引号,模板中的空格和缩进会被保留。
$('#list').html(` <ul> <li>first</li> <li>second</li> </ul> `);
如果不需要保留,可以使用 trim() 方法。
$('#list').html(` <ul> <li>first</li> <li>second</li> </ul> `.trim());
模板字符串中使用变量的方式如下所示,大括号内可以放入任意表达式,包括函数。如果大括号内的值非字符串比如对象,则会默认调用 toString() 方法。
function authorize(user, action) { if (!user.hasPrivilege(action)) { throw new Error( `User ${user.name} is not authorized to do ${action}.`); } }
标签模板
标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。但是,如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。
let a = 5; let b = 10; function tag(stringArr, ...values){ // ... } tag`Hello ${ a + b } world ${ a * b }`; // 等同于 tag(['Hello ', ' world ', ''], 15, 50);
tag 函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分,也就是说,变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间,以此类推。“标签模板”的一个重要应用,就是过滤 HTML 字符串,防止用户输入恶意内容。
其他新增方法
codePointAt()
JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。
var s = " "; s.length // 2 s.charAt(0) // '' s.charAt(1) // '' s.charCodeAt(0) // 55362 s.charCodeAt(1) // 57271
codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。
String.fromCodePoint()
ES5 提供 String.fromCharCode 方法,用于从码点返回对应字符,但是这个方法不能识别 32 位的 UTF-16 字符(Unicode 编号大于 0xFFFF)。ES6 提供了 String.fromCodePoint 方法,可以识别大于 0xFFFF 的字符,正好与 codePointAt 方法相反。
String.fromCharCode(0x20BB7) // "ஷ" String.fromCodePoint(0x20BB7) // " "
String.raw()
该方法可以作为处理模板字符串的基本方法,它会将所有变量替换,而且对斜杠进行转义,方便下一步作为字符串来使用。
String.raw`Hi\n${2+3}!`; // 返回 "Hi\\n5!"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 查找一个字符串中最长不含重复字符的子字符串,计算该最长子字符串的长度
- 字符串、字符处理总结
- 高频算法面试题(字符串)leetcode 387. 字符串中的第一个唯一字符
- php删除字符串最后一个字符
- (三)C语言之字符串与字符串函数
- 算法笔记字符串处理问题H:编排字符串(2064)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。