美文网首页
ES6学习笔记三|字符串扩展

ES6学习笔记三|字符串扩展

作者: ForeverYoung20 | 来源:发表于2016-10-31 16:59 被阅读32次

1. 字符的Unicode表示法

如果直接在“\u”后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成“\u20BB+7”。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。
ES6对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

"\u{20BB7}"   // "𠮷""
\u{41}\u{42}\u{43}"    // "ABC"
let hello = 123;
hell\u{6F}    // 123
'\u{1F680}' === '\uD83D\uDE80'   // true

有了这种表示法之后,JavaScript共有6种方法可以表示一个字符。

'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

2. codePointAt()

ES6提供了codePointAt方法,能够正确处理4个字节储存的字符,返回一个字符的码点。

var s = '𠮷a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.charCodeAt(2) // 97

3. String.fromCodePoint()

ES6提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

4. 字符串的遍历器接口

for (let codePoint of 'foo') {
    console.log(codePoint);
}    //"f","o","o"
  • 优点:可以识别大于0xFFFF的码点。

5. at()

  • 优点:可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。
'abc'.at(0) // "a"
'𠮷'.at(0) // "𠮷"

6. normalize()

7. includes(),startsWith(),endsWith()

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
    这三个方法都支持第二个参数,表示开始搜索的位置。

使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

8. repeat()

  • repeat方法返回一个新字符串,表示将原字符串重复n次
  • 如果是小数,会被取整。
  • 如果参数是负数或者infinity,报错。
  • 如果是0到-1之间的小数,等同于0.
  • 参数NaN等同于0.
  • 如果参数是字符串,则会先转换成数字。

9. padStart(),padEnd()

ES6推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart
用于头部补全,padEnd用于尾部补全。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
  • 如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
  • 如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
  • 如果省略第二个参数,则会用空格补全长度。
  • padStart的常见用途是为数值补全指定位数。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
  • 另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

10. 模板字符串

传统的JavaScript语言,输出模板如下:

$('#result').append( 
    'There are <b>' + basket.count + '</b> ' + 
    'items in your basket, ' + 
    '<em>' + basket.onSale + 
    '</em> are on sale!'
);

ES6引入了模板字符串,如下:

$('#result').append(
    ` There are <b>${basket.count}</b> items 
    in your basket, <em>${basket.onSale}</em> 
    are on sale!`
);
  • 模板字符串中嵌入变量,需要将变量名写在${}中。
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}.`); 
     }
}
  • 大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。
var x =1; 
var y = 2;
'${x} + ${y} = ${x+y};
// 1 + 2 = 3
  • 模板字符串之中还能调用函数

如果大括号中的值不是字符串,将按照一般的规则转为字符串。如:大括号中是一个对象,将默认调用对象的toString方法。

  • 如果模板字符串中的变量没有声明,报错。
  • 如果大括号中是一个字符串,将原样输出。
  • 模板字符串可以嵌套。

11. 标签模板

模板字符串可以紧跟在一个函数后面,该函数被调用来处理这个模板字符串。

alert '123';
//等同于
alert(123);

12. String.raw()

  • 该方法往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠钱再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
    String.rawHi\n${2+3}!;
    // "Hi\n5!"

    String.raw`Hi\u000A!`;
    // 'Hi\\u000A!'
    
  • 如果原字符串的斜杠已经转义,那么String.raw不会做任何处理。

  • String.raw方法也可以作为正常的函数使用。这时,它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组。

String.raw({ raw: 'test' }, 0, 1, 2);// 't0e1s2t'
// 等同于
String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);

相关文章

  • es6的数值,函数,字符串扩展

    一、es6的数值扩展 二、es6的函数扩展 代码效果:对象解构在函数中的应用 三、es6字符串扩展 常用方法 代码...

  • ES6学习笔记三|字符串扩展

    1. 字符的Unicode表示法 如果直接在“\u”后面跟上超过0xFFFF的数值(比如\u20BB7),Java...

  • es6第四章学习

    es6第四章学习 字符串的扩展 1.字符的 Unicode 表示法 ES6 加强了对 Unicode 的支持,允许...

  • es6学习笔记整理(三)字符串扩展

    字符串新增特征: 1、Unicode表示法 2、遍历接口 3、模板字符串 数据和模板拼接成带结果的字符串 ``加变...

  • ES6学习笔记(三)字符串的扩展

    1、字符的unicode表示法 ES6 ,只要将码点放入大括号,就能正确解读该字符 2、codePointAt()...

  • string

    es6 字符串的新增属性。学习笔记此博文 字符串的遍历器的接口。 includes(),startsWith(),...

  • 2018-07-24

    日常打卡,今日学习呀学习....怎么说呢,ES6乃至JS,学习之路漫长呀呀呀. 字符串的扩展includes('s...

  • ES6-02 字符串与正则表达式

    ES6学习笔记-字符串与正则表达式 JS字符串编码 在ES6之前,JS的字符串以16位字符编码(UCS-2)为基础...

  • ECMAScript6新方法(2)

    字符串扩展 ES6加强了对Unicode的支持,并且扩展了字符串对象。 获取字符unicode编码 通过unico...

  • ES6扩展归纳

    ES6扩展归纳 介绍ES6相比与ES5在原有对象上的扩展,包括字符串、正则、数值、函数、数组、对象等扩展,本文是阮...

网友评论

      本文标题:ES6学习笔记三|字符串扩展

      本文链接:https://www.haomeiwen.com/subject/yvlputtx.html