Javascript类型系统之String字符串类型详解

javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串

  字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象。在需要时,javascript会自动在原始形式和对象形式之间转换。本文将介绍字符串String原始类型及String包装对象

定义

  字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列

  字符串类型常被用于表示文本数据,此时字符串中的每个元素都被视为一个代码点。每个元素都被认为占有此序列中的一个位置,用非负数值索引这些位置。首字符从位置0开始,第二个字符在位置1,依次类推

  字符串的长度即其中元素的个数(比如,16 位值)。空字符串长度为零,因而不包含任何元素

Unicode编码

  所有字符都可以写成'\uxxxx'的形式,其中xxxx代表该字符的Unicode编码。比如,\u00A9代表版权符号

var s = '\u00A9'; s // "©"

  若一个字符串包含实际的文本数据,每个元素都被认为是一个单独的UTF-16单元。每个字符在JavaScript内部都是以16位(即2个字节)的UTF-16格式储存

  但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内部的字符长度总是固定为16位,会把这四个字节视为两个字符

var s = '\uD834\uDF06'; s // "𝌆" s.length // 2

  对于U+10000到U+10FFFF的4字节Unicode字符,javascript总是视为两个字符(字符length属性为2)

引号

 字符串String是由双引号(")或单引号(')声明的。而Java则是用双引号声明字符串,用单引号声明字符。由于ECMAScript 没有字符类型,所以可使用这两种表示法中的任何一种,但左右引号必须匹配

//正确 var sColor1 = "red"; var sColor2 = 'red'; //错误 var sColor1 = "red'; var sColor2 = 'red";

  由单引号定界的字符串中可以包含双引号,由双引号定界的字符串也可以包含单引号

'key = "value"' "It's a long journey"

  javascript代码可能会夹杂HTML代码的字符串,HTML代码也会夹杂javascript代码。因此,最好在javascript和HTML代码中各自使用独自的引号风格

  javascript中使用单引号表示字符串,在HTML事件处理程序中使用双引号表示字符串

<button onclick = "alert('thanks')">click me</button>

反斜线

  如果想在单引号定界的字符串中使用单引号,或在双引号定界的字符串中使用双引号,则需要使用反斜线(\)

  常见情况是英文缩写和所有格写法的撇号和单引号是同一个字符,所以这时必须使用反斜线(\)来转义撇号

'Wouldn\'t you prefer this book?' //"Wouldn't you prefer this book?" 'Did she say \'Hello\'?' //"Did she say 'Hello'?" "Did she say \"Hello\"?" //"Did she say "Hello"?"

多行字符

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

//报错 Uncaught SyntaxError: Invalid or unexpected token
'a
b
c';

  在ECMAScript3中,字符串必须写在一行中

  在ECMAScript5中,字符串可以拆分成数行,每行必须以反斜线(\)结束

  如果希望在字符串直接量中另起一行,可以使用转义字符\n

//"onelongline" 'one\ long\ line' /*"two lines"*/ 'two\nlines'

转义字符

  在javascript字符串,反斜线(\)有着特殊的用途,反斜线符号后加一个字符,就不表示它们的字面含义,用来表示一些特殊字符,称为转义字符

\0 空字节
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制nn表示一个字符(n为0-f),如\x41表示'A'
\unnnn 以十六进制nnnn表示一个Unicode字符(n为0-f),如\u03a3表示希腊字符ε

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

'\a' // "a"

  如果字符串需要包含反斜杠,则反斜杠前面需要再加一个反斜杠,用来对自身转义

"Prev \\ Next" // "Prev \ Next"

特点

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzsjxw.html