乐趣区

基本类型字符串

概述
定义
转义
字符串与数组
length 属性
字符集
Base64 转码
参考链接

1. 概述
1.1 定义
排在一起的字符,用单引号或者双引号 一般用单引号

由于 HTML 语言的属性值使用双引号,所以很多项目约定 JavaScript 语言的字符串只使用单引号
‘Did she say ‘Hello’?’
// “Did she say ‘Hello’?”

“Did she say “Hello”?”
// “Did she say “Hello”?”

‘key = “value”‘
“It’s a long journey”

多行报错可加反斜杠 输出还是单行
var longString = ‘Long \
long \
long \
string’;

longString
// “Long long long string”
上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错

输出多行字符串,有一种利用多行注释的变通方法。

(function () {/*
line 1
line 2
line 3
*/}).toString().split(‘n’).slice(1, -1).join(‘n’)
// “line 1
// line 2
// line 3″

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

‘251’ // “©”
‘xA9’ // “©”
‘u00A9’ // “©”

‘172’ === ‘z’ // true
‘x7A’ === ‘z’ // true
‘u007A’ === ‘z’ // true

如果在非特殊字符前面使用反斜杠,则反斜杠会被省略。

‘a’
// “a”

2 字符串与数组
字符串可以被视为字符数
var s = ‘hello’;
s[0] // “h

字符串与数组的相似性仅此而已。实际上,无法改变字符串之中的单个字符。

var s = ‘hello’;

delete s[0];
s // “hello”

s[1] = ‘a’;
s // “hello”

3length 属性 不可改 不报错

length 属性返回字符串的长度,该属性也是无法改变的。

var s = ‘hello’;
s.length // 5

s.length = 3;
s.length // 5

s.length = 7;
s.length // 5
4 字符集
JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。

使用 Unicode 码点表示字符,即将字符写成 uxxxx 的形式,其中 xxxx 代表该字符的 Unicode 码点。比如,u00A9 代表版权符号

var fu006Fu006F = ‘abc’;
foo // “abc”
上面代码中,第一行的变量名 foo 是 Unicode 形式表示,第二行是字面形式表示。JavaScript 会自动识别

1 个字符 16 位 2 个字节也是单位长度

但是,UTF-16 有两种长度:对于码点在 U +0000 到 U +FFFF 之间的字符,长度为 16 位(即 2 个字节);对于码点在 U +10000 到 U +10FFFF 之间的字符,长度为 32 位(即 4 个字节),而且前两个字节在 0xD800 到 0xDBFF 之间,后两个字节在 0xDC00 到 0xDFFF 之间。举例来说,码点 U +1D306 对应的字符为????,它写成 UTF-16 就是 0xD834 0xDF06。

上一节的那个四字节字符????,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。

‘????’.length // 2
上面代码中,JavaScript 认为???? 的长度为 2,而不是 1。

5.Base64 转码
作用 1. 使用 Base64 编码,将不可打印如 ASCII 码 0 到 31 的符号都无法打印出来转成可以打印的字符
2. 有时需要以文本格式传递二进制数据,那么也可以使用 Base64 编码。

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

JavaScript 原生提供两个 Base64 相关的方法。

btoa():任意值转为 Base64 编码
atob():Base64 编码转为原来的值

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

btoa(‘ 你好 ’) // 报错
要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节,再使用这两个方法。

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

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

b64Encode(‘ 你好 ’) // “JUU0JUJEJUEwJUU1JUE1JUJE”
b64Decode(‘JUU0JUJEJUEwJUU1JUE1JUJE’) // “ 你好

退出移动版