六维教程

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() 是常用方法。
  • 字符串不可变,方法返回新字符串,原字符串不变,结果要赋值接收。
上一篇
JavaScript 数字与基本运算
下一篇
JavaScript 布尔值与比较运算