ECMAScript 6 -- 字符串的扩展

字符串的遍历器接口:

字符串可以被for...of循环遍历。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    for (let codePoint of ‘foo‘) {
        console.log(codePoint)
    }
</script>
</body>
</html>

这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    var text = String.fromCodePoint(0x20BB7);
    for (let i of text) {
        console.log(i);
    }
</script>
</body>
</html>

at()

ES5对字符串对象提供charAt方法,返回字符串给定位置的字符。该方法不能识别码点大于0xFFFF的字符。

normalize()

normalize方法可以接受一个参数来指定normalize的方式,参数的四个可选值如下。

  • NFC,默认参数,表示“标准等价合成”(Normalization Form Canonical Composition),返回多个简单字符的合成字符。所谓“标准等价”指的是视觉和语义上的等价。
  • NFD,表示“标准等价分解”(Normalization Form Canonical Decomposition),即在标准等价的前提下,返回合成字符分解的多个简单字符。
  • NFKC,表示“兼容等价合成”(Normalization Form Compatibility Composition),返回合成字符。所谓“兼容等价”指的是语义上存在等价,但视觉上不等价,比如“囍”和“喜喜”。(这只是用来举例,normalize方法不能识别中文。)
  • NFKD,表示“兼容等价分解”(Normalization Form Compatibility Decomposition),即在兼容等价的前提下,返回合成字符分解的多个简单字符。

includes(), startsWith(), endsWith()

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    var s = ‘Hello world!‘;

    s.startsWith(‘Hello‘) // true
    s.endsWith(‘!‘) // true
    s.includes(‘o‘) // true

    console.log(s.startsWith(‘Hello‘));
    console.log(s.endsWith(‘!‘));
    console.log( s.includes(‘o‘));
</script>
</body>
</html>

结果:

true

true

true

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    var s = ‘Hello world!‘;
    console.log(s.startsWith(‘world‘, 6) );
    console.log(s.endsWith(‘Hello‘, 5));
    console.log( s.includes(‘Hello‘, 6));
</script>
</body>
</html>

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

结果:

true

true

false

repeat()

repeat方法返回一个新字符串,表示将原字符串重复n次。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    console.log( ‘hello‘.repeat(2));
</script>
</body>
</html>

结果:

hellohello

padStart(),padEnd()

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    console.log(‘x‘.padStart(5, ‘ab‘));
    console.log(‘x‘.padStart(4, ‘ab‘) );
    console.log(‘x‘.padEnd(5, ‘ab‘));
    console.log(‘x‘.padEnd(4, ‘ab‘) );
</script>
</body>
</html>

结果:

ababx

abax

xabab

xaba

模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    // 字符串中嵌入变量
    var name = "Bob", time = "today";
    console.log(`Hello ${name}, how are you ${time}?`);
</script>
</body>
</html>

结果:

Hello Bob, how are you today?

引用模板字符串本身,在需要时执行,可以像下面这样写:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    // 写法一
    let str = ‘return ‘ + ‘`Hello ${name}!`‘;
    let func = new Function(‘name‘, str);
    func(‘Jack‘) // "Hello Jack!"
    console.log(func(‘Jack‘));

    // 写法二
    let str1 = ‘(name) => `Hello ${name}!`‘;
    let func1 = eval.call(null, str1);
    console.log(func1(‘Jack‘));

</script>
</body>
</html>

结果:

Hello Jack!

Hello Jack!

时间: 2024-12-18 02:15:06

ECMAScript 6 -- 字符串的扩展的相关文章

《ECMAScript 6 入门- 第三章 字符串的扩展》 —— 摘抄

1. codePointAT方法 JavaScript内部,字符以UTF-16的格式储存,每个字符固定为2个字节.对于那些需要 4个字节储存的字符(Unicode编号大于0xFFFF的字符),JavaScript会认为它们是两个字符.ES6提供了codePointAt方 法,能够正确处理4个字节储存的字符,返回一个字符的Unicode编号. codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法. function is32Bit(c) { return c.codeP

ES6的新特性(4)——字符串的扩展

字符串的扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字在\u0000~\uFFFF之间的字符,其中xxxx表示字符的 Unicode 码点. "\u0061" // "a" 超出\u0000~\uFFFF范围的字符,必须用两个双字节的形式表示. "\uD842\uDFB7" // "??" // 也可以用花括号括起

ES6小实验-字符串的扩展

ES6里面的对字符串的扩展实际上就是增加了一些方法,使对字符串的操作更加完善,下面做几个小实验来验证下: includes(): 返回布尔值,表示是否找到了参数字符串,支持第二的参数,表示开始的位置 'use strict'; var s = 'Hello world!'; console.log(s.includes('Hello'));//true startsWith(): 返回布尔值,表示参数字符串是否在源字符串的头部,支持第二的参数,表示开始的位置 'use strict'; var

字符串的扩展

概述 ES6增加了对字符串的扩展. 1.字符串的遍历器接口 ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. for (let codePoint of 'foo') { console.log(codePoint) } // "f" // "o" // "o" 2.includes(), startsWith(), endsWith() includes():返回布尔值,表示是否找到了参数字符串. startsWith

字符串转数字扩展方法、字符串处理扩展方法

写代码时喜欢连贯的.链式的写下去,而不是光标再返回到前面写类型转换等等. 自定义了些字符串扩展方法: 1 /// <summary> 2 /// 字符串操作扩展方法类 3 /// </summary> 4 public static class StringOperationExtensions 5 { 6 /// <summary> 7 /// 若输入字符串为null,则返回String.Empty. 8 /// </summary> 9 /// <

3.字符串的扩展

字符串的扩展 字符串的扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. "\u0061" // "a" 但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符.超出这个范围的字符,必须用两个双字节的形式表示. "\uD842\uDFB7" // "??" &

ES6字符串相关扩展

变量的解构赋值 // 数组的解构赋值 let [a,b,c] = [1,2,3]; //1,2,3 let [a,b,c] = [,123,]; //undefined 123 undefined let [a=111,b,c] = [,123,]; //111 123 undefined console.log(a,b,c); 对象的解构赋值 let {foo,bar} = {foo : 'hello',bar : 'hi'};//hello hi let {foo,bar} = {bar :

用Python遍历(Linux)的子目录并且查找出指定的字符串带(扩展名)黑白名单功能

<软件&网站架构师手记>之一_用Python脚本补充Linux命令的不完善之二: 用Python脚本遍历(Linux)的子目录(或文件夹)并且查找出指定的字符串,并且显示: 1.目录位置: 2.(字符串)所在的文件名: 3.字符串所在(文件中)的行号; 4.以及显示本行信息,既显示本行的(从本行开始)的256个字符. #并且支持把扩展名放进脚本中 用数组存放的黑.白(扩展名)名单中: 既先在"白扩展名"类型的文件当中:检索,如*.txt, *.log, *.cnf,

复习es6-解构赋值+字符串的扩展

1. 数组的解构赋值 从数组中获得变量的值,给对应的声明变量赋值,,有次序和对应位置赋值 解构赋值的时候右边必须可以遍历 解构赋值可以使用默认值 惰性求值,当赋值时候为undefined时候,默认是个函数就会执行函数 2.对象解构赋值 与数组不同的是,对象没有按次序排序 对象按照属性名赋值 3.字符串扩展 字符串使用unicode表示法 es6给字符串加上了遍历器借口,可用( for  of ) 遍历 字符串模板 1.用反引号(')设置字符串 2.${param} 来显示变量 3.<%   %>