跳至正文

JavaScript入门教程笔记(5)-字符串

定义

字符串就是放在单引号或双引号之中的若干个字符。单引号字符串的内部可以使用双引号,双引号字符串的内部可以使用单引号。

'abc'
"abc"
'name = "abc"'
"It's ok"

上面这些都是合法的字符串。

如果要在单引号字符串内部使用单引号,就必须加上反斜杠,用来转义。同理,双引号字符串内部使用双引号,也是如此。

'Did she say \'Hello\'?' // "Did she say 'Hello'?"
"Did she say \"Hello\"?" // "Did she say "Hello"?"

长字符串

字符串默认只能写在一行内,像下面这样直接分成多行将会报错。

'a 
b
c'
// 报错

如果需要分成多行,可以在每一行的尾部使用反斜杠,像这样:

'a \
b \
c'

注意,反斜杠后面必须是换行符,而不能有其它字符(比如空格),否则报错。

长字符串分成多行的另一种方法是使用连接运算符(+),像这样:

'a'
+ 'b'
+ 'c'

转义符

反斜杠(\)在字符串内用来表示一些特殊字符,所以又被称为转义符。

  • \0 :null(\u0000)
  • \b :后退键(\u0008)
  • \f :换页符(\u000C)
  • \n :换行符(\u000A)
  • \r :回车键(\u000D)
  • \t :制表符(\u0009)
  • \v :垂直制表符(\u000B)
  • \' :单引号(\u0027)
  • \" :双引号(\u0022)
  • \ :反斜杠(\u005C)

上面代码中,例如 \n 表示换行,则这样输出的时候就会分成两行。

console.log('1\n2')
// 1
// 2

字符串与数组

字符串相当于字符数组,因此可以使用数组的方括号运算符,来返回某个位置的字符。

var s = 'hello';
s[0] // h
s[4] // o
'hello'[1] // "e"

但是,无法改变字符串中的单个字符,像下面这样的操作将会默默地失效。

var s = 'hello';
delete s[0];
s // "hello"
s[1] = 'a';
s // "hello"

字符集

JavaScript使用Unicode字符集,每个字符的长度固定为16位(UTF-16),即2个字节。

Base64转码

有时,文本里面包含一些不可打印的符号,比如 ASCII 码0到31的符号都无法打印出来,这时可以使用 Base64 编码,将它们转成可以打印的字符。另一个场景是,有时需要以文本格式传递二进制数据,那么也可以使用 Base64 编码。

所谓 Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。

JavaScript 原生提供两个 Base64 相关的方法。
- btoa():任意值转为 Base64 编码
- atob():Base64 编码转为原来的值

var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"

注意,这两个方法不适合非 ASCII 码的字符,像下面这样就会报错。

btoa('你好') // 报错

要将非 ASCII 码字符转为 Base64 编码,必须先插入一个转码环节,再使用这两个方法。

function b64Encode(str) {
  return btoa(encodeURIComponent(str));
}

function b64Decode(str) {
  return decodeURIComponent(atob(str));
}

b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"

注:本文适用于ES5规范,原始内容来自 JavaScript 教程,有修改。

标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注