参照内容来自《JavaScript权威指南》
字符串的定义
字符串(string)是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。JavaScript通过字符串类型来表示文本。
JavaScript采用UTF-16编码的Unicode字符集。最常用的Unicode字符都是通过16位的内码表示,并代表字符串中的单个字符,那些不能表示为16位的Unicode字符则遵循UTF-16编码规则——用两个16位值组成的一个序列(亦称做“代理项对”)表示。
即Unicode字符可能有两种表示方法:
(1)如果Unicode字符能表示16位,则使用一个16位的内码,表示字符串中的单个字符。
(2)如果Unicode字符不能表示为16位,则遵循UTF-16编码规则,使用两个16位值组成的一个序列来表示。这意味着一个长度为2的JavaScript字符串(两个16位值)有可能表示一个Unicode字符。
例如:
var p = "π"; //π(一个Unicode字符)由16位内码表示
var e = "e"; // e(一个Unicode字符)由17位内码表示(即该Unicode字符不能表示为16位)
p.length // => 1: p包含一个16位值,即单个字符
e.length // => 2: e通过UTF-16编码后包含两个16位值,即一个JavaScript字符串
JavaScript定义的各式字符串操作方法均作用于16位值,而非字符,也不作用于上述提及的用两个16位值组成的一个序列(即不作用于代理项对)。
总结:
一个16位内码(或者通过UTF-16编码后包含两个16位值的一个序列)
↓
单个Unicode字符
↓
单个字符(或者两个字符)
↓
JavaScript字符串
↓
文本
字符串的使用
字符串的连接:使用+进行连接。例如:var a = “A” + “apple”;
计算字符串的长度:即计算其所包含的16位值的个数,不是计算其所包含Unicode字符的个数,可利用length属性。例如:a.length
访问字符串:使用charAt()方法,或者使用[ ]访问字符串中的单个字符(16位值),例如:var a = “A” + “apple”;而a[0]即为A。
注:
在JavaScript中字符串是固定不变的,很多似乎修改了字符串的方法(例如replace()和toUpperCase())其实是返回新字符串,原字符串本身并没有发生改变。