JavaScript 字符串
字符串是最常用的数据类型之一,页面上的文字、表单里的输入、接口返回的标题,全是字符串。这一篇讲清楚字符串的写法、拼接、常用方法,以及一个重要的性质,不可变性。
三种引号
字符串用引号包裹,JavaScript 提供三种引号,单引号、双引号、反引号,都能用来写字符串。
const a = '单引号字符串';
const b = "双引号字符串";
const c = `反引号字符串`;
单引号和双引号功能完全一样,本教程统一用单引号。反引号是模板字符串的标记,能力更强,下一节讲。
引号内想要包含特殊字符,需要转义。反斜杠加字符构成转义序列,比如 \n 表示换行、' 表示单引号本身。
console.log('第一行\n第二行');
// 输出两行文字,中间换行
console.log('它叫\'小明\'');
// 输出 它叫'小明'
模板字符串
模板字符串用反引号包裹,最核心的能力是嵌入表达式,用 ${} 把变量或表达式包起来,插值直接写,不用拼接。
const name = '小明';
const age = 18;
const message = `我是${name},今年${age}岁`;
console.log(message); // 输出 我是小明,今年18岁
对比用 + 拼接的老写法
const message = '我是' + name + ',今年' + age + '岁';
模板字符串明显更清晰,没有一堆引号和加号。它还能写多行字符串,反引号内的换行会保留
const poem = `
床前明月光
疑是地上霜
`;
console.log(poem);
这种多行写法在处理长文本、生成 HTML 片段时非常方便。模板字符串是 ES6 特性,已经是现代 JavaScript 的标准用法,本教程直接使用。
常用字符串方法
字符串自带一批常用属性和方法。注意 .length 是属性不是方法,后面五个是方法。
const msg = ' Hello World ';
console.log(msg.length); // 输出 16,属性,字符总数
console.log(msg.toUpperCase()); // 输出 HELLO WORLD ,全部转大写
console.log(msg.toLowerCase()); // 输出 hello world ,全部转小写
console.log(msg.trim()); // 输出 Hello World,去掉两端空白
console.log('Hello World'.slice(0, 5)); // 输出 Hello,截取第 0 位到第 5 位
逐个解释
- .length 是属性,返回字符串的字符个数,含空格。
- .toUpperCase() 把全部字母转成大写,常用于规范化用户输入。
- .toLowerCase() 把全部字母转成小写。
- .trim() 去掉字符串两端的空格、换行等空白字符,处理表单输入必备。
- .slice(a, b) 截取从索引 a 到索引 b 之间的部分,不包含 b,b 省略时截到末尾。
字符串还有 replace、split、includes 等更多方法,遇到再学,先把这几个用熟。
字符串的不可变性
字符串是不可变类型,创建后内容不能修改。所有字符串方法都不会改动原字符串,而是返回一个新字符串,原字符串保持不变。
const greeting = 'Hello';
const upper = greeting.toUpperCase();
console.log(greeting); // 输出 Hello,原字符串没有变
console.log(upper); // 输出 HELLO,新字符串
尝试直接修改字符串的内容也无效
const word = 'abc';
word[0] = 'z';
console.log(word); // 输出 abc,修改不生效
这和对象完全不同,对象属性可以改,字符串不能。所以处理字符串时,结果一定来自方法的返回值,写代码时要赋值接收。
小结
- 字符串有三种引号,单引号、双引号、反引号,转义字符如 \n 表示换行。
- 模板字符串用反引号和 ${},能嵌入表达式、写多行字符串,比 + 拼接清晰,推荐使用。
- .length 是属性,.toUpperCase()、.toLowerCase()、.trim()、.slice() 是常用方法。
- 字符串不可变,方法返回新字符串,原字符串不变,结果要赋值接收。