Javascript ES6扩展了字符串一些新的功能,在这里主要记录一下字符串新增内容。
1.codePointAt()方法
ES6新增加了完全支持UTF-16的codePointAt()方法,此方法接受编码单元的位置而非字符位置作为参数,返回与字符串中给定位置对应的码位。示例如下:
**let text=”比特s”
console.log(text.codePointAt(0))//27604
console.log(text.codePointAt(1))//29305
console.log(text.codePointAt(2))//115
**
>
2.String.fromCodePoint()方法
与codePointAt()方法相反,该方法根据指定的码位生成一个具体的字符串。示例如下:
console.log(String.fromCodePoint(27604));//比
console.log(String.fromCodePoint(29305));//特
console.log(String.fromCodePoint(115));//s
3.normalize()方法
在ES6中,js要对字符串进行对比操作时,需要将字符串标准化为同一种形式,故新增normalize()方法,此方法提供了一个Unicode的标准化形式,将具体调用此方法字符转化为相同标准以方便执行具体对比操作,码位计算等等。代码示例如下:
let value=[‘ae’,’be’];
let normalized=value.map(function(text){
return text.normalize();
});
normalized.sort(function(a,b){
if(a<b){
console.log(-1);
}else if(a===b){
console.log(0);
}else{
console.log(1);
}
});//-1此处将数组value中存储的字符串转换为统一标准后调用sort()方法进行排序处理,最后成功返回值-1.
4.字符串中子串识别
此处主要包含3个方法:
includes()方法,如果在字符串中检测到指定文本则返回true,否则返回false。
startsWith()方法,如果在字符串起始部分检测到指定文本则返回true,否则返回false。
endsWith()方法,如果在字符串的结束部分检测到指定文本则返回true,否则返回false。
以上3个方法都接受两个参数,第一个参数指定要搜索的文本,第二个参数指定搜索位置的索引值,为可选参数。如果指定了第二个参数,则includes()方法和startsWith()方法会从索引值位置开始匹配,endsWith()方法会从字符串长度减去这个索引值位置开始匹配。如果不指定第二个参数,则includes方法和startsWith()方法从字符串起始处开始匹配,而endsWith()则从字符串末尾处开始匹配。示例如下:**let text=”hello world!”;
console.log(text.includes(“hello”));//true
console.log(text.endsWith(“!”));//true
console.log(text.startsWith(“w”));//false
console.log(text.includes(“o”,4));//true
console.log(text.endsWith(“o”,4));//false
console.log(text.startsWith(“o”,4));//true
**
>
5.repeat()方法
repeat()方法接受一个number类型的参数,表示当前字符串的重复次数,返回值是当前字符串重复一定次数后的新字符串。
示例如下:
console.log(“x”.repeat(3));//“xxx”
console.log(“hello”.repeat(2));//“hellohello”
console.log(“abc”.repeat(4));//“abcabcabcabc”
6.模板字面量
在ES6中JS通过模板字面量补齐了ES5所缺少的字符串特性,通过多行字符串、基本字符串格式化、HTML转义等全新的方法来跳出已有的JS字符串体系,解决了相关问题。
6.1 HTML转义
代码示例如下:
let message =
hello world!
;
console.log(message);//“hello world!”
console.log(typeof message);//string
console.log(message.length);//12此处使用模板字面量语法创建了一个字符串,直接用反撇号将其包含起来即可。这是变量的值与一个普通字符串无差异。
如果想在字符串中使用反撇号,就用反斜杠()将其转义即可,代码示例如下:let message =
\
hello` world!; console.log(message);//"
hello` world!”
console.log(typeof message);//string
console.log(message.length);//14其中需要注意的是,在模板自变量中,不需要转义单、双引号。
6.2 多行字符串
在ES6中新增多行字符串写法,类比于python中raw字符串方式理解,主要有如下几种代码示例:let message =
hello world!
;
console.log(message);//“hello
// world!”
console.log(typeof message);//string
console.log(message.length);//30在模板字面量中··之间包含的皆属于字符串一部分,所以直接将字符串换行即可。还有另一种转义方法创建多行字符串,代码如下:
let message =
hello\nworld!
;
console.log(message);//“hello
// world!”
console.log(typeof message);//string
console.log(message.length);//12转义方法将js同行字符串换行处理,类似于c语言一样,长度就是字符数组元素个数。
对于ES5标准下多行字符串添加方式示例如下,对比观之即可:var message=[“hello”,
“world”].join(“\n”);
console.log(message)
6.3 字符串占位符
字符串占位符是由${}组成,中间可以包含任意JS表达式。正在一个模板自变量中,我们可以将任何合法的js表达式嵌入到占位符中并将其作为字符串的一部分输出到结果中。
代码示例如下:
*let count=10,
price=0.25,
message=`${count} cost $${(countprice).toFixed(2)}`;
console.log(message);//10 cost $2.50
**
>
综上,ES6中对于字符串操作又定义了很多新东西,这些果然为JS增添了无穷魅力。