💥当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
一、字符串属性
字符串长度:length
const str = 'abcdefg'
str.length // 7
字符串虽然有长度,但是的它的截断方法不生效,数组的话就会生效。
const str = 'hello';
str.length = 3;
console.log(str); // 'hello'
let arr = [1, 2, 3, 4];
arr.length = 2;
console.log(arr); //输出 [1,2]
二、字符串方法
2.1 获取字符串指定位置的值
1. charAt(index)
返回指定索引位置的字符
let str = "HELLO WORLD";
str.charAt(2) // L
str.charAt(20) //超出字符串长度返回空字符''
str[2] // L
str[-2] // undefined
当index的取值不在str的长度范围内时,str[index]会返回undefined,而charAt(index)会返回空字符串;除此之外,str[index]不兼容ie6-ie8,charAt(index)可以兼容。
2. charCodeAt(index)
返回在指定的位置的字符的 Unicode 编码
let str = "HELLO WORLD";
str.charCodeAt(0); // 72
返回值是 0 - 65535 之间的整数,表示给定索引处的 UTF-16 代码单元,如果指定位置没有字符,将返回 NaN
2.2 检索字符串
1. indexOf()
返回某个指定的字符串值在字符串中首次出现的位置。
indexOf(searchvalue,start)
-
start 规定在字符串中开始检索的位置(可选)
-
区分大小写
-
如果没有找到匹配的字符串则返回 -1。
let str = "Hello world, welcome to the universe.";
let n = str.indexOf("e"); // 1
let m = str.indexOf("e", 4) // 14
let p = str.indexOf("a") // -1
2. lastIndexOf()
lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,如果指定第二个参数 start,则在一个字符串中的指定位置从后向前搜索。
注意: 该方法将从后向前检索字符串,但返回是从起始位置 (0) 开始计算子字符串最后出现的位置。 看它是否含有字符串。
lastIndexOf(searchvalue,start)
-
开始检索的位置在字符串的 start 处或字符串的结尾(没有指定 start 时)。
-
区分大小写的!
-
如果没有找到匹配字符串则返回 -1 。
let str = "I am from runoob,welcome to runoob site.";
let n = str.lastIndexOf("runoob"); // 28
let m = str.lastIndexOf("runoob", 9); //-1
3. includes()
includes() 方法用于判断字符串是否包含指定的子字符串。
如果找到匹配的字符串则返回 true,否则返回 false。
注意:
includes(searchvalue, start)
-
start:可选,设置从哪个位置开始查找,默认为 0。
-
includes() 方法区分大小写。
let str = "Hello world, welcome to the universe.";
let n = str.includes("world") // true
let m = str.includes("world", 14) // false
4.startsWith()
查看字符串是否以指定的子字符串开始。
如果是以指定的子字符串开头返回 true,否则 false。
注意:
startsWith(searchvalue, start)
-
start: 可选,查找的开始位置,默认为 0。
-
startsWith() 方法对大小写敏感。
let str = "Hello world, welcome to the Runoob.";
let n = str.startsWith("Hello") // true
let m = str.startsWith("world") // false
let p = str.startsWith("world", 6) // true
5. endsWith()
判断当前字符串是否是以指定的子字符串结尾的(区分大小写)
如果传入的子字符串在搜索字符串的末尾则返回 true,否则将返回 false。
注意: endsWith(searchvalue, length)
- length: 设置字符串的长度
let str = "To be, or not to be, that is the question.";
str.endsWith("question."); // true
str.endsWith("Question."); // false
str.endsWith("to be"); // false
str.endsWith("to be", 19); // true
2.3 连接多个字符串
concat()
连接两个或更多字符串,并返回新的字符串。等同于+
let str1 = 'abcdefg'
let str2 = ' hello world'
let str3 = str1.concat(str2) // abcdefg hello world
2.4 查找正则表达式的匹配
1. match()
查找找到一个或多个正则表达式的匹配。
match(regexp)
-
regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
-
返回值为 数组 注意: match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
-
i - 修饰符是用来执行不区分大小写的匹配。
-
g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。
let str = "The rain in SPAIN stays mainly in the plain";
let n = str.match(/ain/g) // ['ain', 'ain', 'ain']
let m = str.match(/ain/gi) // ['ain', 'AIN', 'ain', 'ain']
let p = str.match(/abc/g) // null
2. search()
查找与正则表达式相匹配的字符串。
search(searchvalue)
-
searchvalue 必须。查找的字符串或者正则表达式。
-
返回值:Number 与指定查找的字符串或者正则表达式相匹配的 String 对象起始位置。
-
如果没有找到任何匹配的子串,则返回 -1。
let str = "The rain in SPAIN stays mainly in the plain";
let n = str.search('rain') // 4
let m = str.search(/ain/i) // 5
let p = str.search(/AIN/) // 14
let q = str.search('abc') // -1
2.5 替换字符串
1. replace()
在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
replace(searchvalue,newvalue)
-
返回一个新的字符串
-
该方法不会改变原始字符串。
let str = "Mr Blue has a blue house and a blue car";
let n = str.replace("blue", "red");
// Mr Blue has a red house and a blue car
let m = str.replace(/blue/g, "red");
// Mr Blue has a red house and a red car
let p = str.replace(/blue/gi, "red");
// Mr red has a red house and a red car
2. repalceAll()
在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,该函数会替换所有匹配到的子字符串
replaceAll(regexp|substr, newSubstr|function)
-
当使用一个 regex 时,必须设置全局("g")标志, 否则,它将引发 TypeError:"必须使用全局 RegExp 调用 replaceAll"。
-
返回一个新的字符串
-
该方法不会改变原始字符串。
let str = "Mr Blue has a blue house and a blue car";
let n = str.replaceAll("blue", "red");
// Mr Blue has a red house and a red car
let m = str.replaceAll(/blue/gi, "red");
// Mr red has a red house and a red car
2.6 提取字符串
1. slice()
提取字符串的某个部分,并以新的字符串返回被提取的部分。
slice(start,end)
-
start: 必须。 要抽取的片断的起始下标,第一个字符位置为 0。如果为负数,则从尾部开始截取。
-
end: 可选。要截取的片段结尾的下标。 -1 指字符串的最后一个字符的位置,-2 指倒数第二个字符
-
返回值:String 提取的字符串
-
start(包含) 和 end(不包含)
let str = "Hello world!";
let n = str.slice(0) // Hello world!
let m = str.slice(3) // lo world!
let p = str.slice(1, 4) // ell
let q = str.slice(-2) // d!
2. substr()
从起始索引号提取字符串中指定数目的字符。
ECMAscript 没有对该方法进行标准化,因此反对使用它
substr(start,length)
-
start: 必需。要抽取的子串的起始下标。必须是数值。
-
length: 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。
-
substr() 方法不会改变源字符串。
let str = "Hello world!";
let n = str.substr(2) // llo world!
let m = str.substr(6,5) // world
3. substring()
提取字符串中两个指定的索引号之间的字符。
substring(from,* to*)
-
from: 必需。一个非负的整数,规定要提取的子串的第一个字符在字符串中的位置。
-
to: 可选。一个非负的整数,比要提取的子串的最后一个字符在字符串中的位置多 1。
-
包括 开始 处的字符,但不包括 结束 处的字符
let str = "Hello world!";
let n = str.substring(2) // llo world!
let m = str.substring(6, 11) // world
2.7 字符串分割成字符串数组
💥 split()
把一个字符串分割成字符串数组
split(separator,limit)
-
separator: 可选。字符串或正则表达式,从该参数指定的地方分割 string Object。
-
limit: 可选。该参数可指定返回的数组的最大长度
-
返回值:Array ,一个字符串数组
-
该数组是通过在 separator 指定的边界处将字符串分割成子串创建的。返回的数组中的字串不包括 separator 自身。
-
如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割
-
split() 方法不改变原始字符串。
let str = "How are you doing today?";
let n = str.split('')
// ['H', 'o', 'w', ' ', 'a', 'r', 'e', ' ', 'y', 'o', 'u', ' ', 'd', 'o', 'i', 'n', 'g', ' ', 't', 'o', 'd', 'a', 'y', '?']
let m = str.split(' ')
// ['How', 'are', 'you', 'doing', 'today?']
let p = str.split()
// ['How are you doing today?']
let q = str.split(' ', 3)
// ['How', 'are', 'you']
let k = str.split('o')
// ['H', 'w are y', 'u d', 'ing t', 'day?']
2.8 字符串大小写转换
1. toLowerCase()
把字符串转换为小写
let str = "Reeed";
str.toLowerCase() // 'reeed'
2. toUpperCase()
把字符串转换为大写
let str = "Reeed";
str.toUpperCase() // REEED
2.9 去除字符串两边的空白
trim()
去除字符串的头尾空格
-
删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等
-
不会改变原始字符串
-
不适用于 null, undefined, Number 类型
-
返回移除头尾空格的字符串
let str = " Reeed "
str.trim() // Reeed
2.10 获取字符串本身
1. valueOf()
返回 String 对象的原始值
注意: valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中
let str = "Reeed"
str.valueOf() // Reeed
2. toString()
返回一个 String 对象的值
let str = "Reeed"
str.toString() // Reeed
2.11 其他方法
1. repeat()
复制字符串指定次数,并将它们连接在一起返回。
repeat(count)
- count :必需,设置要复制的次数。
- 返回值: String , 连接后的字符串
let str = "blue";
let n = str.repeat(2) // blueblue
2. fromCharCode()
将 Unicode 编码转为字符
let n = String.fromCharCode(65); // A
let str = String.fromCharCode(72,69,76,76,79) // HELLO