从零开始学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.转义符

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

字面量含义
\0null字符 (\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.示例网页

网页链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值