从零开始学web开发之JavaScript-3.数据类型-(2)字符串

本节内容引用 《JavaScript 标准参考教程(alpha)》by 阮一峰 ,《JavaScript从入门到精通(标准版)》,W3School JavaScript教程

1.定义

  • 字符串(String),也称为文本,JavaScript文本不分字符串和字符,唯一没有固定大小的原始类型。
  • 字符串由Unicode字符、数字和各种符号组而成。

2.字面量

由单引号或者双引号声明,在项目中应使用同一种风格,不可两种混用。
如下面两种方式都是有效的。

var a="abc",
var a = 'abc'

字符串特性:
1. 如果字符串包含在双引号中,则字符串内可以包含单引号。反之,可以在单引号中包含双引号。
2. 字符串应在一行内显示,换行显示是不允许的。但可以通过在末尾使用\来实现多行书写,如下。

var longString = "Long \
long \
long \
string";
longString
// "Long long long string"

通过反斜杠,原来写在一行的字符串,可以分成多行书写。输出的时候还是单行,效果与写在同一行完全一样。
注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错

3.转义符

在字符串中添加特殊字符,需要使用转义字符表示,如单引号、双引号等。

字面量 含义
\0 null字符 (\u0000)
\b 退格符(\u0008)
\t 制表符 (\u0009)
\n 换行 (\u000A)
\v 垂直制表符 (\u000B)
\f 换页符 (\u000C)
\r 回车 (\u000D)
\” 双引号 (\u0022)
\’ 单引号(\u0027)
\\ 反斜杠 (\u005C)
\nnn 八进制代码 nnn 表示的字符(n 是 0 到 7 中的一个八进制数字)
\xnn 十六进制代码 nn 表示的字符(n 是 0 到 F 中的一个十六进制数字)
\unnnn 十六进制代码 nnnn 表示的 Unicode 字符(n 是 0 到 F 中的一个十六进制数字)

最后三项示例如下:

'\251' // "©"
'\xA9' // "©"
'\u00A9' // "©"

4.字符数组与长度

  • 字符串中每个字符都有特定的位置,首字符从位置 0 开始,第二个字符在位置 1,依此类推。
  • 这意味着字符串中的最后一个字符的位置一定是字符串的长度减 1。
  • 字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始)。
var s = 'hello';
s[0] // "h"
s[1] // "e"
s[4] // "o"

// 直接对字符串使用方括号运算符
'hello'[1] // "e"
  • 如果方括号中的数字超过字符串的长度,或者方括号中根本不是数字,则返回undefined。
'abc'[3] // undefined
'abc'[-1] // undefined
'abc'['x'] // undefined

无法直接用数组方法操作字符串中的值,,那些会改变原数组的方法,比如push()、sort()、reverse()、splice()都对字符串无效,只有将字符串显式转为数组后才能使用,可使用+进行字符串的拼接操作。

length属性

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

"abcde".length = 5;

5.字符集

JavaScript使用Unicode字符集,每个字符在JavaScript内部都是以16位(即2个字节)的UTF-16格式储存,即JavaScript的单位字符长度固定为16位长度,2个字节。

对于于U+10000U+10FFFF之间的字符,JavaScript总是视为两个字符(字符的length属性为2),用来匹配单个字符的正则表达式会失败(JavaScript认为这里不止一个字符),charAt方法无法返回单个字符,charCodeAt方法返回每个字节对应的十进制值。

下面的正则表达式可以识别所有UTF-16字符。

([\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF])

由于JavaScript引擎(严格说是ES5规格)不能自动识别辅助平面(编号大于0xFFFF)的Unicode字符,导致所有字符串处理函数遇到这类字符,都会产生错误的结果。
如果要完成字符串相关操作,就必须判断字符是否落在0xD8000xDFFF这个区间。
下面是能够正确处理字符串遍历的函数。

function getSymbols(string) {
  var length = string.length;
  var index = -1;
  var output = [];
  var character;
  var charCode;
  while (++index < length) {
    character = string.charAt(index);
    charCode = character.charCodeAt(0);
    if (charCode >= 0xD800 && charCode <= 0xDBFF) {
      output.push(character + string.charAt(++index));
    } else {
      output.push(character);
    }
  }
  return output;
}

var symbols = getSymbols('????');

symbols.forEach(function(symbol) {
  // ...
});

6.base64转码

Base64是一种编码方法,可以将任意字符转成可打印字符。
使用这种编码方法,主要不是为了加密,而是为了不出现特殊字符,简化程序的处理。
JavaScript原生提供两个Base64相关方法。

  • btoa():字符串或二进制值转为Base64编码
  • atob():Base64编码转为原来的编码

7.示例网页

网页链接

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/80370562