字符串提取方法
slice() substr() substring()
作用: 返回对应字符串的一个子字符串,而且都接收一个或两个参数。
区别: 对于slice()和substiring()而言,第一个参数表示子字符串开始的位置,第二个参数表示子提取结束的位置,对于substr()而言,第二个参数表示返回的子字符串数量。
省略第二个参数都会提取到字符串末尾
let str = 'hello world'
console.log(str.slice(3)) // lo world
console.log(str.substring(3)) // lo world
console.log(str.slice(3, 5)) // lo
console.log(str.substr(3, 5)) // lo wo
当某个参数为负值时:
slice()方法会将所有负值参数都当成字符串长度加上负参数值。
console.log(str.slice(-3)) // rld
console.log(str.slice(3, -4)) //lo w
这里,在给slice传入负参数值时,-3会被转换为8(11+ (-3)),实际上调用的是slice(8);当第二个参数为负值时,slice()将第二个参数转换为7,实际上调用的是slice(3,7)。
substring()方法会将所有负值数值都转换为0。
console.log(str.substring(-3)) // hello world
console.log(str.substring(3, -4)) // hel
这里,substring()会将所有负值转换为0,所以第一个例子实际调用的是substring(0),即全部字符串;第二个例子实际调用的是substring(3,0),但是它等价于substring(0,3),因为这个方法会自动将较小的参数作为起点。
substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负值参数转换为0。
console.log(str.substr(-3)) //rld
console.log(str.substr(3, -4)) // ""(empty)
这里要注意,第二个例子的-4会自动转换为0,就意味着返回的字符串包含0个字符,因此返回的是一个空字符串。
字符串位置方法
indexOf() lastIndexOf()
作用: 这两种方法均种字符串种搜索传入的字符串,并返回位置。
区别: indexOf()方法从字符串开头开始查找字符串,而lastIndexOf()从字符串末尾开始查找字符串。
let str = 'hello world'
console.log(str.indexOf('o')) // 4
console.log(str.lastIndexOf('o')) // 7
当方法接收两个参数时,第二个参数表示开始搜索的位置。
这就意味着,indexOf()会从这个参数指定位置开始向字符串末尾搜索,忽略该位置之前的字符;lastIndexOf()会从这个参数指向的位置开始想向字符串开头搜索,忽略该位置之后到字符串末尾的字符。
console.log(str.indexOf("o", 6)); // 7
console.log(str.lastIndexOf("o", 6)); // 4
这里,第一个例子从"w"字符开始向后找第一个"o"字符;而第二个例子则是从"w"开始向前找第一个"o"字符。
ES6新添方法 – 字符串包含方法
startsWith() endsWith() includes()
作用: 从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值。
区别:
startsWith() 检查从第一个字符开始看是否匹配(即前面几个字符是否是要检查包含的子字符串);
endsWith() 检查从最后一个字符开始向前看是否匹配。(即最后几个字符是否是要检查包含的子字符串。);
includes() 检查整个字符串。
let message = "foobarbaz";
console.log(message.startsWith("foo")); // true
console.log(message.startsWith("bar")); //false
console.log(message.endsWith("foo")); //fasle
console.log(message.endsWith("baz")); //true
console.log(message.includes("bar")); //true
console.log(message.includes("dmsl")); //fasle
接收两个参数时:
console.log(message.startsWith("foo")); //true
console.log(message.startsWith("foo", 1)); // false
console.log(message.endsWith("baz")); // true
console.log(message.endsWith("baz", 6)); // false
console.log(message.includes("bar")); // true
console.log(message.includes("bar", 4)); // false
startsWIdth() 和 includes() 方法的第二个参数表示开始搜索的位置。如果传入了第二个参数,就意味着这两个方法会从指定的位置向字符串末尾搜索。
而,endsWith() 表示第二个参数应该作为字符串末尾的位置。
trim()
作用: 用于清除字符串前、后的所有空格符。
let s1 = " 11 ";
console.log(s1); // " 11 "
console.log(s1.trim()); // "11"
另外,trimLeft()只清除左空格,trimRight()只清除右空格。
字符串迭代和解构
字符串的原型暴露一个@@iterator方法,表示可以迭代字符串的每个字符。
在for-of循环中可以通过迭代器按序访问每个字符:
for (const code of "abcfd") {
console.log(code);
}
字符串通过解构分割成字符数组
let message = "abcde";
console.log([...message]); // ['a', 'b', 'c', 'd', 'e']
split()
作用: 根据传入的分隔符将字符串拆分成数组。
第一个参数作为分隔符,第二个参数表示返回数组元素个数。
let message = "abcde";
console.log(message.split("")); // ['a', 'b', 'c', 'd', 'e']
console.log(message.split("", 3)); // ['a', 'b', 'c']