String
String
是对应字符串的引用类型。每个String
对象都有一个length
属性,表示字符串中字符的数量。
let stringValue = ”hello world“
console.log(stringValue.length) // 11
字符串的操作方法
concat()
方法:用于将一个或者多个字符串拼接成一个新字符串。返回一个新的字符串
let stringValue = "hello ";
let result = stringValue.concat("world");
console.log(stringValue) // 'hello '
console.log(result) // "hello world"
concat()
方法可以接受任意多个参数,将参数追加到字符串后面,但是更常用的方式是使用加号操作符(+)。对于拼接多个字符串来说,使用加号更方便。
ECMAScript提供了三个从字符串中提取子字符串的方法:slice()
、substr()
、substring()
。这三个方法都返回调用他们的字符串的一个子字符串,而且都接受一个或两个参数。任何情况下,省略第二个参数都意味着提取到字符串末尾。
slice()
: 第一个参数表示字符串开始的位置,第二个参数表示提取结束的位置(即该位置之前的字符会被提取出来),返回一个新的字符串。当参数中有负值的时候,将所有的负值参数都当成字符串长度加上负参数值。
let str = "hello world"
console.log(str.slice(1, 4)) // ell
console.log(str.slice(1, -1)) // ello worl 相当于(1, 10)
substring()
: 第一个参数表示字符串开始的位置,第二个参数表示提取结束的位置(即该位置之前的字符会被提取出来),返回一个新的字符串。当参数中有负值的时候,会将所有的负参数值都转换为0。
let str = "hello world";
console.log(str.substring(1, 4)); // ell
console.log(str.substring(1, 0)); // h 相当于(0, 1)
substr()
: 第一个参数表示字符串开始的位置,第二个参数表示返回的字符串数量。当参数中有负值的时候,会将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为0。
let str = "hello world";
console.log(str.substr(0, 3)); // hel
console.log(str.substr(0 -1); // ""
console.log(str.substr(-1, 3)); // d
字符串位置方法
有两个方法用于在字符串中定位子字符串:indexOf()
和lastIndesOf()
。这两个方法从字符串中搜索传入的字符串,并返回位置,如果没有找到,则返回-1。indexOf()
表示从字符串开头开始查找子字符串,lastIndexOf()
表示从字符串的末尾开始查找子字符串。
let str = "hello world";
console.log(str.indexOf("o")); // 4
console.log(str.lastIndexOf("o")); // 7
字符串的包含方法
ECMAScirpt6 增加了3个用于判断字符串中是否包含另一个字符串的方法:startsWith()
、endsWith()
、includes()
。这些方法都会从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值。他们的区别在于,startsWith()
检查开始于索引0的匹配项,表示是否以传入的字符串开头。endsWidth()
方法检查开始于索引(string.length - substring.length)的匹配项,而includes()
方法检查整个字符串。
let message = "foobarbaz";
console.log(message.startsWith("foo"); // true
console.log(message.startsWith("bar"); // false
console.log(message.endsWith("baz"); // true
console.log(message.endsWith("bar"); // false
console.log(message.includes("bar"); // true
console.log(message.includes("app"); // false
startsWith()
和includes()
方法接受可选的第二个参数,表示开始搜索的位置。如果传入第二个参数表示这两个方法会从指定位置向着字符串末尾搜索,忽略该位置之前的所有字符。
endsWith()
方法接受可选的第二个参数,表示应该当做字符串末尾的位置。如果不提供这个参数,那么默认就是字符串长度,如果提供这个参数,那么就好像字符串只有那么多字符一样。
trim() 方法
trim()
这个方法会创建字符串的一个副本,删除前后所有的空格字符,再返回结果。
let str = " hello world ";
console.log(str); // " hello world "
console.log(str.trim()); // "hello world"
repeat() 方法
repeat()
方法接受一个整数参数,表示将字符串复制多少次,然后返回拼接所有副本后的结果。
let str = "na ";
console.log(str.repeat(3) + "batman") // na na na batman
字符串迭代与解构
字符串的原型上暴露了一个@@iterator
方法,表示可以迭代字符串的每个字符。在for-of
循环中可以通过这个迭代器按序访问每个字符;有了这个迭代器之后,字符串就可以通过解构操作符来结构了、比如可以更方便的把字符串分隔成为字符数组
for (const v of "abcde") {
console.log(v)
}
console.log([..."abc"]) // ["a", "b", "c"]
字符串的大小写转换
toLowerCase():把字符串中的英文字符串转换成小写
toUpperCase():把字符串中的英文字符串转换成大写
字符串模式匹配方法
match()
方法,这个方法本质上跟RegExp对象的exec()
方法相同。metch()
方法接收一个参数,可以是一个正则表达式字符串,也可以是一个RegExp对象。
let text = "cat, bat, sat, fat";
let pattern = /.at/;
let matches = text.match(pattern);
console.log(matches.index); // 0
console.log(matches[0]); // cat
console.log(pattern.lastIndex); // 0
match()
方法返回的数组与RegExp对象的exec()
方法返回的数组是一样的,第一个元素是与整个模式匹配的字符串,匹配成功返回的结果,其余元素则是与表达式中的捕获组匹配的字符串。
search()
方法,接受一个参数,可以是一个正则表达式字符串,也可以是一个RegExp对象。这个方法返回的是第一个匹配的位置索引,如果没有找到则返回-1。search()
始终从字符串开头向后匹配。
replace()
方法。用于字符串的替换,这个方法接受两个参数,第一个参数可以是正则表达式,也可以是一个字符串,第二个参数可以是一个字符串,也可以是一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串,如果想要替换所有的子字符串,则第一个参数必须为正则表达式并且带全局标记。
let text = "cat, bat, sat, fat";
let result = text.replace("at", "ond");
console.log(result) // "cond, bat, sat, fat"
result = text.replace(/at/g, "ond");
console.log(result) // "cond, bond, sond, fond"
split()
方法,根据传入的分隔符将字符串拆分成数组。作为分隔符的参数可以是字符串,也可以是RegExp对象。还可以传入第二个参数,即数组的大小,确保返回的数组不会超过指定大小。
let text = "red, pink, blue";
console.log(text.split(",")) // ["red", "pink", "blue"]
console.log(text.split(",", 2)) // ["red", "pink"]