1. 扩展方法
子串的识别
ES6 之前判断字符串是否包含子串用 indexOf
方法,ES6 新增了子串的识别方法。
includes()
:返回布尔值,判断是否找到参数字符串。startsWith()
:返回布尔值,判断参数字符串是否在原字符串的头部。endsWith()
:返回布尔值,判断参数字符串是否在原字符串的尾部。
以上三个方法都可以接受两个参数(需要搜索的字符串,可选的搜索起始位置索引)。
let s = "apple,banana,orange";
console.log(s.includes("banana")); // true
console.log(s.startsWith("apple")); // true
console.log(s.endsWith("apple")); //false
console.log(s.startsWith("appltt", )); //false
console.log(s.startsWith("banana", 6)); //true
字符串重复
repeat()
:返回新的字符串,表示将字符串重复指定次数返回。
let s1 = 'Hello!'
console.log(s1.repeat(2)); //Hello!Hello!
注意:
- 如果参数是小数,向下取整
let s1 = 'Hello!'
console.log(s1.repeat(3.8));
- 如果参数是 NaN或者0,等同于 repeat 零次
let s1 = 'Hello!'
console.log(s1.repeat(NaN)); // "" 无输出
- 如果参数是 0 至 -1 之间的小数,会进行取整运算,0 至 -1 之间的小数取整得到 -0 ,等同于 repeat 零次
let s1 = 'Hello!'
console.log(s1.repeat(-0.1)); // "" 无输出
- 如果参数是负数或者 Infinity ,会报错:
let s1 = 'Hello!'
console.log(s1.repeat(-1));
//console.log(s1.repeat(Infinity));
- 如果传入的参数是字符串,则会先将字符串转化为数字
let s1 = 'Hello!'
console.log(s1.repeat('2')); //Hello!Hello!
console.log(s1.repeat('hh')); //"" 无输出
字符串补全
以下两个方法接受两个参数,**第一个参数是指定生成的字符串的最小长度,第二个参数是用来补全的字符串。**如果没有指定第二个参数,默认用空格填充。
padStart
:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。
padEnd
:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。
console.log("h".padStart(5,"o")); // "ooooh"
console.log("h".padEnd(5,"o")); // "hoooo"
console.log("h".padStart(5)); // " h"
- 如果指定的长度小于或者等于原字符串的长度,则返回原字符串:
console.log("hello".padStart(5,"A")); // "hello"
- 如果原字符串加上补全字符串长度大于指定长度,则截去超出位数的补全字符串:
console.log("hello".padEnd(10,",world!")); // "hello,worl"
其常用于补全位数:
console.log("123".padStart(10,"0")); // "0000000123"
2. 模板字符串
模板字符串用反引号 ` 表示,可以用来定义多行字符串,也可以在字符串中加入变量和表达式。
多行字符串
// 会报错
// s1 = 'Hey,
// can you stop angry now ? '
//不会报错
s2 = `Hey,
can you stop angry now?`
插入变量和表达式
变量名和js表达式都可以写在 ${}
中
let name = "Mike";
let age = 27;
let info = `My Name is ${name},I am ${age+1} years old next year.`
console.log(info);
在字符串中调用函数:
function f() {
return "have fun!";
}
let string2 = `Game start,${f()}`;
console.log(string2); // Game start,have fun!