资讯专栏INFORMATION COLUMN

解析JavaScript中的字符串类型与字符编码支持

sarva / 2864人阅读

摘要:中的字符串也像那样支持反斜杠的转移并且字符集方面默认为下面就来详细解析中的字符串类型与字符编码支持定义字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。后面紧跟四个十六进制数到,代表一个字符。

JavaScript中的字符串也像Python那样支持反斜杠的转移,并且字符集方面默认为Unicode,下面就来详细解析JavaScript中的字符串类型与字符编码支持

定义 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
`"abc"`
`"abc"`
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
"key = "value""
"It"s a long journey"
上面两个都是合法的字符串。

如果要在单引号字符串的内部,使用单引号(或者在双引号字符串的内部,使用双引号),就必须在内部的单引号(或者双引号)前面加上反斜杠,用来转义。

`"Did she say "Hello"?"`
`// "Did she say "Hello"?"`
`"Did she say "Hello"?"`
`// "Did she say "Hello"?"`
由于HTML语言的属性值使用双引号,所以很多项目约定JavaScript语言的字符串只使用单引号,本教程就遵守这个约定。当然,只使用双引号也完全可以。重要的是,坚持使用一种风格,不要两种风格混合。

字符串默认只能写在一行内,分成多行将会报错。

`"a`
`b`
`c"`
`// SyntaxError: Unexpected token ILLEGAL`
上面代码将一个字符串分成三行,JavaScript就会报错。
如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
`var` `longString =` `"Long `
`long `
`long `
`string"``;`
`logString`
`// "Long long long string"`
上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。

连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。

`var` `longString =` `"Long "`
`+` `"long "`
`+` `"long "`
`+` `"string"``;`
如果想输出多行字符串,有一种利用多行注释的变通方法。
`(``function` `() {` `/*`
`line 1`
`line 2`
`line 3`
`*/``}).toString().split(``"
"``).slice(1, -1).join(``"
"``)`
`// "line 1`
`// line 2`
`// line 3"`
上面的例子中,输出的字符串就是多行。

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

需要用反斜杠转义的特殊字符,主要有下面这些:

0 null(u0000)

b 后退键(u0008)

f 换页符(u000C)

n 换行符(u000A)

r 回车键(u000D)

t 制表符(u0009)

v 垂直制表符(u000B)

" 单引号(u0027)

" 双引号(u0022)

反斜杠(u005C)

上面这些字符前面加上反斜杠,都表示特殊含义。
`console.log(``"1
2"``)`
`// 1`
`// 2`
上面代码中,n表示换行,输出的时候就分成了两行。
反斜杠还有三种特殊用法。

(1)HHH
反斜杠后面紧跟三个八进制数(000到377),代表一个字符。HHH对应该字符的Unicode码点,比如251表示版权符号。显然,这种方法只能输出256种字符。

(2)xHH
x后面紧跟两个十六进制数(00到FF),代表一个字符。HH对应该字符的Unicode码点,比如xA9表示版权符号。这种方法也只能输出256种字符。

(3)uXXXX
u后面紧跟四个十六进制数(0000到FFFF),代表一个字符。HHHH对应该字符的Unicode码点,比如u00A9表示版权符号。

下面是这三种字符特殊写法的例子。
`"251"` `// "©"`
`"xA9"` `// "©"`
`"u00A9"` `// "©"`
`"172"` `===` `"z"` `// true`
`"x7A"` `===` `"z"` `// true`
`"u007A"` `===` `"z"` `// true`
如果在非特殊字符前面使用反斜杠,则反斜杠会被省略。
`"a"`
`// "a"`
上面代码中,a是一个正常字符,前面加反斜杠没有特殊含义,反斜杠会被自动省略。
如果字符串的正常内容之中,需要包含反斜杠,则反斜杠前面需要再加一个反斜杠,用来对自身转义。
`"Prev  Next"`
`// "Prev  Next"`
字符串与数组 字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从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`
但是,字符串与数组的相似性仅此而已。实际上,无法改变字符串之中的单个字符。
`var` `s =` `"hello"``;`
`delete` `s[0];`
`s` `// "hello"`
`s[1] =` `"a"``;`
`s` `// "hello"`
`s[5] =` `"!"``;`
`s  `// "hello"`
上面代码表示,字符串内部的单个字符无法改变和增删,这些操作会默默地失败。

字符串之所以类似于字符数组,实际是由于对字符串进行方括号运算时,字符串会自动转换为一个字符串对象。

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

`var` `s =` `"hello"``;`
`s.length` `// 5`
`s.length = 3;`
`s.length` `// 5`
`s.length = 7;`
`s.length` `// 5`
上面代码表示字符串的length属性无法改变,但是不会报错。

字符集 JavaScript使用Unicode字符集,也就是说在JavaScript内部,所有字符都用Unicode表示。

不仅JavaScript内部使用Unicode储存字符,而且还可以直接在程序中使用Unicode,所有字符都可以写成”uxxxx”的形式,其中xxxx代表该字符的Unicode编码。比如,u00A9代表版权符号。

`var` `s =` `"u00A9"``;`
`s` `// "©"`
每个字符在JavaScript内部都是以16位(即2个字节)的UTF-16格式储存。也就是说,JavaScript的单位字符长度固定为16位长度,即2个字节。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108561.html

相关文章

  • JavaScript如何实现UTF-16编码转换为UTF-8编码——utfx.js源码解析

    摘要:编码转换为编码下面让我们来看下如何将编码的数据转换为编码的数据。该方法是将码进行编码转换,从而得到编码的数据。 概述 当你在前端需要通过二进制数据与服务端进行通信时,你可能会遇到二进制数据的编码问题。大部分服务端的字符串编码类型都为UTF-8,而JavaScript中字符串编码类型是UTF-16,因此,你需要一个能够将字符串在两种编码方式间进行转换的方法。 本文通过对utfx.js这个...

    maybe_009 评论0 收藏0
  • 50道JavaScript基础面试题(附答案)

    摘要:事件中属性等于。响应的状态为或者。同步在上会产生页面假死的问题。表示声明的变量未初始化,转换为数值时为。但并非所有浏览器都支持事件捕获。它由两部分构成函数,以及创建该函数的环境。 1 介绍JavaScript的基本数据类型Number、String 、Boolean 、Null、Undefined Object 是 JavaScript 中所有对象的父对象数据封装类对象:Object、...

    huaixiaoz 评论0 收藏0
  • JSON数据格式及其在WEB开发中的应用

    摘要:是什么是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,是原生格式,这意味着在中处理数据不需要任何特殊的或工具包。底层存储为格式是个构建在之上的新型查询语言。 JSON是什么? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 Java...

    red_bricks 评论0 收藏0

发表评论

0条评论

sarva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<