在 JavaScript 中,string
是用于表示文本的数据类型。字符串是由一系列字符组成的,可以通过单引号 ('
)、双引号 ("
) 或反引号 (`
) 来定义。下面是有关 JavaScript 字符串的详细介绍。
1. 创建字符串
1.1. 使用单引号或双引号
你可以使用单引号或双引号来创建字符串,二者功能相同。
let str1 = 'Hello, world!'; let str2 = "JavaScript is awesome!";
1.2. 使用模板字符串(反引号)
模板字符串(Template literals)允许在字符串中嵌入表达式,支持多行文本和插值。
let name = "Alice"; let greeting = `Hello, ${name}! Welcome to JavaScript.`; console.log(greeting); // 输出 "Hello, Alice! Welcome to JavaScript."
1.3. 多行字符串
通过反引号,字符串可以跨越多行。
let multiLine = `This is line 1 This is line 2 This is line 3`; console.log(multiLine);
2. 字符串常用方法
2.1. 字符串长度 (length
)
返回字符串中字符的个数。
let str = "Hello"; console.log(str.length); // 输出 5
2.2. 访问字符 (charAt()
)
返回指定位置的字符。
let str = "Hello"; console.log(str.charAt(1)); // 输出 "e" (索引从 0 开始)
2.3. 获取字符编码 (charCodeAt()
)
返回指定字符的 Unicode 编码。
let str = "Hello"; console.log(str.charCodeAt(0)); // 输出 72 (H 的 Unicode 编码)
2.4. 字符串切割 (slice()
)
从指定的开始位置截取字符串。
let str = "Hello, world!"; console.log(str.slice(0, 5)); // 输出 "Hello"
2.5. 字符串替换 (replace()
)
将字符串中的某个子字符串替换为另一个字符串。
let str = "Hello, world!"; let newStr = str.replace("world", "JavaScript"); console.log(newStr); // 输出 "Hello, JavaScript!"
2.6. 转换为大写 (toUpperCase()
) 和小写 (toLowerCase()
)
将字符串中的字母全部转换为大写或小写。
let str = "Hello, world!"; console.log(str.toUpperCase()); // 输出 "HELLO, WORLD!" console.log(str.toLowerCase()); // 输出 "hello, world!"
2.7. 字符串连接 (concat()
)
连接多个字符串。
let str1 = "Hello"; let str2 = "world!"; let result = str1.concat(" ", str2); console.log(result); // 输出 "Hello world!"
2.8. 字符串分割 (split()
)
将字符串根据指定的分隔符拆分成一个数组。
let str = "apple,banana,cherry"; let arr = str.split(","); console.log(arr); // 输出 ["apple", "banana", "cherry"]
2.9. 去除空白 (trim()
)
去掉字符串两端的空白字符。
let str = " Hello, world! "; console.log(str.trim()); // 输出 "Hello, world!"
3. 字符串的其他方法
3.1. startsWith()
和 endsWith()
检测字符串是否以某个子字符串开始或结束。
let str = "Hello, world!"; console.log(str.startsWith("Hello")); // 输出 true console.log(str.endsWith("world!")); // 输出 true
3.2. includes()
检查字符串是否包含某个子字符串。
let str = "Hello, world!"; console.log(str.includes("world")); // 输出 true
3.3. indexOf()
和 lastIndexOf()
返回指定子字符串的第一次或最后一次出现的索引。
let str = "Hello, world!"; console.log(str.indexOf("world")); // 输出 7 console.log(str.lastIndexOf("o")); // 输出 4
3.4. repeat()
返回一个重复指定次数的字符串。
let str = "Hello "; console.log(str.repeat(3)); // 输出 "Hello Hello Hello "
4. 字符串与数组
在 JavaScript 中,字符串本质上是字符数组,因此可以通过数组的方法对字符串进行处理。
4.1. 转换为数组
将字符串转换为数组,每个字符作为数组的元素。
let str = "Hello"; let arr = [...str]; // 使用扩展运算符 console.log(arr); // 输出 ["H", "e", "l", "l", "o"]
4.2. 转换为字符数组 (split()
)
通过 split()
方法将字符串分割成数组。
let str = "Hello"; let arr = str.split(""); console.log(arr); // 输出 ["H", "e", "l", "l", "o"]
4.3. 将数组转换为字符串 (join()
)
通过 join()
方法将字符数组合并为一个字符串。
let arr = ["H", "e", "l", "l", "o"]; let str = arr.join(""); console.log(str); // 输出 "Hello"
5. 字符串的编码与解码
5.1. encodeURIComponent()
和 decodeURIComponent()
- 用于编码和解码 URL 组件。
let str = "Hello World!"; let encodedStr = encodeURIComponent(str); console.log(encodedStr); // 输出 "Hello%20World%21" let decodedStr = decodeURIComponent(encodedStr); console.log(decodedStr); // 输出 "Hello World!"
5.2. btoa()
和 atob()
- 将字符串编码为 Base64 格式,或从 Base64 格式解码回原始字符串。
let str = "Hello"; let encoded = btoa(str); console.log(encoded); // 输出 "SGVsbG8=" let decoded = atob(encoded); console.log(decoded); // 输出 "Hello"
6. 字符串的编码格式
JavaScript 字符串默认采用 UTF-16 编码,这意味着每个字符占用 2 个字节(对于大多数常见字符),但某些 Unicode 字符(如表情符号)可能会占用 4 个字节。
7. 小结
JavaScript 字符串是强大的文本处理工具,提供了丰富的方法来操作、修改和查询字符串。掌握这些方法可以让你更高效地处理文本数据。
方法 | 描述 | 示例 |
---|---|---|
charAt() | 获取指定位置的字符 | str.charAt(0) |
toUpperCase() | 转换为大写 | str.toUpperCase() |
toLowerCase() | 转换为小写 | str.toLowerCase() |
replace() | 替换子字符串 | str.replace("old", "new") |
split() | 将字符串分割成数组 | str.split(",") |
trim() | 去掉前后空格 | str.trim() |
startsWith() | 检查是否以某个子串开头 | str.startsWith("H") |
endsWith() | 检查是否以某个子串结尾 | str.endsWith("!") |
这些方法使得字符串在 JavaScript 中的处理变得简单高效。
JavaScript 的 substring()
方法用于提取字符串中两个索引之间的部分。它不会修改原始字符串,而是返回一个新的字符串。
substring()
方法
语法
str.substring(indexStart, indexEnd)
indexStart
:要提取的子字符串的起始位置(包括此位置)。indexEnd
:可选,子字符串的结束位置(不包括此位置)。如果省略此参数,substring()
会提取到字符串的末尾。
返回值
返回一个新的字符串,包含从 indexStart
到 indexEnd
之间的字符。如果省略 indexEnd
,则从 indexStart
提取到字符串的末尾。
示例
1. 基本用法
let str = "Hello, world!"; let result = str.substring(0, 5); console.log(result); // 输出 "Hello"
2. 省略 indexEnd
let str = "Hello, world!"; let result = str.substring(7); console.log(result); // 输出 "world!"
3. 索引顺序
substring()
方法会自动交换 indexStart
和 indexEnd
的位置,确保 indexStart
小于或等于 indexEnd
。
let str = "Hello, world!"; let result = str.substring(7, 0); // 即使 7 > 0,返回的结果也相同 console.log(result); // 输出 "Hello"
4. 当 indexEnd
超过字符串长度时
如果 indexEnd
超过了字符串的最大索引,它会被自动设置为字符串的长度。
let str = "Hello, world!"; let result = str.substring(7, 20); // 20 超过字符串长度,自动取到末尾 console.log(result); // 输出 "world!"
5. 负值参数
如果 indexStart
或 indexEnd
是负数,substring()
会把它们当作 0 处理。因此,负值不会被用于索引。
let str = "Hello, world!"; let result = str.substring(-5, 5); // 负值被当作 0 处理 console.log(result); // 输出 "Hello"
与 slice()
方法的区别
substring()
和 slice()
方法很相似,但有一些不同点:
- 参数交换:
substring()
会交换负值的参数,把负数当作 0 处理。slice()
则会将负值视为从字符串尾部倒数的位置。
- 返回值:
substring()
返回从indexStart
到indexEnd
(不包括indexEnd
)的部分。slice()
也返回从indexStart
到indexEnd
(不包括indexEnd
)的部分,但它支持负值索引。
示例对比:
let str = "Hello, world!"; console.log(str.substring(7, -1)); // 输出 "Hello" console.log(str.slice(7, -1)); // 输出 "world"
总结
substring()
是一个非常常用的方法,用于从字符串中提取子字符串。它不支持负索引,并且在交换参数时会保证返回有效的结果。它适用于需要提取从某个位置开始的字符串部分的情况。