JavaScript 数据类型 - 字符串
JavaScript 字符串
1. 字符串基础
-
定义:字符串是由单引号
'
、双引号"
或反引号`
括起来的任意文本。例如:let str1 = 'Hello'; // 单引号 let str2 = "World"; // 双引号 let str3 = `JavaScript`; // 反引号
-
引号的使用:
- 如果字符串内部包含单引号或双引号,可以使用另一种引号括起来:
let str = 'I\'m "OK"'; // 使用单引号括起来,内部的单引号需要转义 let str2 = "He said, \"I'm fine.\""; // 使用双引号括起来,内部的双引号需要转义
- 如果字符串内部既包含单引号又包含双引号,可以使用反引号:
let str = `He said, "I'm fine."`; // 使用反引号,无需转义
- 如果字符串内部包含单引号或双引号,可以使用另一种引号括起来:
-
转义字符:使用
\
对特殊字符进行转义,例如:\n
:换行符\t
:制表符\\
:表示反斜杠本身\x##
:ASCII字符的十六进制表示,例如\x41
等同于'A'
\u####
:Unicode字符的表示,例如\u4e2d\u6587
等同于'中文'
let str = 'This is a\nnew line'; // 包含换行符 let str2 = 'This is a\ttab'; // 包含制表符 let str3 = 'A backslash: \\'; // 包含反斜杠 let str4 = '\x41'; // 等同于 'A' let str5 = '\u4e2d\u6587'; // 等同于 '中文'
2. 多行字符串
- 多行字符串的表示:使用反引号(
`
)可以创建多行字符串,而无需使用特殊的转义字符。let multiLineStr = ` This is a multi-line string. `; console.log(multiLineStr);
3. 模板字符串
-
模板字符串的定义:模板字符串是ES6引入的一种创建字符串的新方式,使用反引号(
`
)包裹字符串内容。 -
基本用法:
- 可以在模板字符串中嵌入变量和表达式,使用
${expression}
语法。
let name = '小明'; let age = 20; let message = `你好, ${name}, 你今年${age}岁了!`; console.log(message); // 输出:你好,小明,你今年20岁了
- 模板字符串支持多行文本,无需额外的转义字符。
let multiLineText = ` 这是一个 多行文本 `; console.log(multiLineText);
- 可以在模板字符串中嵌入变量和表达式,使用
-
嵌入表达式:模板字符串中可以嵌入任意JavaScript表达式,包括运算符、函数调用等。
let x = 10; let y = 20; let result = `两数之和是:${x + y}`; // 嵌入表达式 console.log(result); // 输出:两数之和是:30 function getGreeting(name) { return `Hello, ${name}!`; } console.log(getGreeting('小红')); // 输出:Hello, 小红!
4. 字符串操作
4.1 获取字符串长度
- 使用
length
属性获取字符串的长度。let s = 'Hello, world!'; console.log(s.length); // 输出:13
4.2 索引操作
- 使用类似数组的索引操作符
[]
访问字符串中的字符,索引从0开始。let s = 'Hello, world!'; console.log(s[0]); // 输出:'H' console.log(s[6]); // 输出:' ' console.log(s[12]); // 输出:'!'
- 注意:字符串是不可变的,对字符串的某个索引赋值不会改变字符串。
let s = 'Test'; s[0] = 'X'; console.log(s); // 输出:'Test'(字符串未改变)
4.3 转换大小写
toUpperCase()
:将字符串转换为大写。let s = 'Hello'; console.log(s.toUpperCase()); // 输出:'HELLO'
toLowerCase()
:将字符串转换为小写。let s = 'Hello'; console.log(s.toLowerCase()); // 输出:'hello'
4.4 查找子字符串
indexOf()
:从字符串开头开始查找指定子字符串的位置,未找到时返回-1
。let s = 'hello, world'; console.log(s.indexOf('world')); // 输出:7 console.log(s.indexOf('World')); // 输出:-1(区分大小写)
lastIndexOf()
:从字符串末尾开始查找指定子字符串的位置,未找到时返回-1
。let s = 'hello, world, hello'; console.log(s.lastIndexOf('hello')); // 输出:13
4.5 截取子字符串
substring(start, end)
:截取从start
索引开始到end
索引(不包括end
)的子字符串。let s = 'hello, world'; console.log(s.substring(0, 5)); // 输出:'hello' console.log(s.substring(7)); // 输出:'world'
slice(start, end)
:与substring
类似,但支持负索引。let s = 'hello, world'; console.log(s.slice(0, 5)); // 输出:'hello' console.log(s.slice(-5)); // 输出:'world'
4.6 替换字符串
replace()
:用于替换字符串中的内容。可以替换一次或全部,支持正则表达式。let s = 'hello, world'; console.log(s.replace('world', 'JavaScript')); // 输出:'hello, JavaScript' console.log(s.replace(/world/g, 'JavaScript')); // 全局替换
4.7 分割字符串
split()
:将字符串分割成数组,可以指定分隔符。let s = 'hello,world,javascript'; console.log(s.split(',')); // 输出:['hello', 'world', 'javascript']
4.8 检查字符串
includes()
:检查字符串是否包含指定子字符串,返回布尔值。let s = 'hello, world'; console.log(s.includes('world')); // 输出:true console.log(s.includes('JavaScript')); // 输出:false
startsWith()
:检查字符串是否以指定子字符串开头,返回布尔值。let s = 'hello, world'; console.log(s.startsWith('hello')); // 输出:true
endsWith()
:检查字符串是否以指定子字符串结尾,返回布尔值。let s = 'hello, world'; console.log(s.endsWith('world')); // 输出:true
5. 练习
let s = 'Hello World';
let upper = s.toUpperCase(); // 转换为大写
let lower = s.toLowerCase(); // 转换为小写
let indexof = s.indexOf('world'); // 查找子字符串
let aSubstring = s.substring(7); // 截取子字符串
console.log(upper); // 输出:HELLO WORLD
console.log(lower); // 输出:hello world
console.log(indexof); // 输出:-1(未找到)
console.log(aSubstring); // 输出:orld