第三章--------文本---字符、码点和字符串

本文介绍了JavaScript中字符串数据类型的基础概念,包括其16位值的表示、索引系统、不可变性,以及ES6引入的模板字面量和正则表达式。还涵盖了字符串操作方法、转义序列和字符串比较规则。
摘要由CSDN通过智能技术生成

JavaScript中表示文本的类型是String,即字符串。字符串是16位值的不可修改的有序序列,其中每个值都表示一个Unicode字符。字符串的length属性是它包含的16位值的个数。

JavaScript的 字符串(以及数组)使用基于零的索引,因此第一个16位值的索引是0,第二个值的索引是1,以此类推。空字符串是长度为0的字符串。

JavaScript没有表示单个字符串元素的专门类型。要表示一个16位值,使用长度为1的字符串即可。

JavaScript使用Unicode字符集的UTF-16编码,因此JavaScript 字符串是无符号16位值的序列。最常用的Unicode字符(即“基本多语言平面”中的字符)的码点(codepoint)是16位的,可以用字符 串中的一个元素来表示。码点超出16位的Unicode字符使用UTF-16规 则编码为两个16位值的序列(称为surrogate pair,即“代理对”)。这意味着一个长度为2(两个16位值)的JavaScript字符串 可能表示的只是一个Unicode字符:

 JavaScript的字符串操作方法一般操作的是16位值,而不是字符。它们不会特殊对待代理对,不对字符串进行归一化,甚至不保证字符串是格式正确的UTF-16。

在ES6中,字符串是可迭代的,如果对字符串使用for/of循环 或...操作符,迭代的是字符而不是16位值。

1. 字符串字面量

要在JavaScript程序中包含字符串,可以把字符串放到一对匹配的单引号、双引号或者反引号('、"或`)中。由一种引号定义的字符串里也可以包含另外两种引号。

使用反引号定义字符串是ES6的特性,允许在字符串字面量中包含(或插入)JavaScript表达式。

早期:使用+操作符把单行字符串拼接成长字符串。

ES5:在每行末尾加一个反斜杠(\)从而把字符串字面量写到多行上。这个反斜杠和它后面的行终结符都不属于字符串字面量。如果需要在单引号或双引号字符串中包含换行符,需要使用字符序列\n

 在使用单引号定义字符串时,必须注意英文中的缩写和所有格,比如can't和O'Reilly中的单引号。因为这里的撇号就是单引号,所以必须使用反斜杠字符(\)“转义”单引号中出现的所有撇号。

最好使用不同的引号,比如双引号里面使用单引号,这样就不会引起冲突。

2.字符串字面量中的转义序列

反斜杠在JavaScript字符串中有特殊的作用:它与后面的字符组合在一起,可以在字符串中表示一个无法直接表示的字符。例 如,\n是一个表示换行符的转义序列。

\'转义之后,它不再表示字符串结束,而是表示撇号。

 3.使用字符串

如果对数值使用+操作符,那数值会相加。如果对字符串使用+操作符,那字符串会拼接起来。

可以使用标准的全等===和不全等!==操作符比较字符串。只有当这两个字符串具有完全相同的16位值的序列时才相等。字符串也 可以使用<、<=、>、和>=操作符来比较。

确定字符串长度,可以通过length属性:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let s = "hello nell";
    </script>
</body>
</html>

 JavaScript中的字符串是不可修改的。方法都返回新字符串,它们并不会修改调用它们的字符串。

字符串也可以被当成只读数组,使用方括号访问字符串中个别的字符:

4.模板字面量

在ES6及之后的版本中,字符串字面量可以用反引号来定义。因为模板字面量可以包含任意JavaScript表达式。

反引号中字符串字面量最终值的计算,涉及对其中包含的所有表达式求值、将这些表达式的值转 换为字符串,然后再把这些字符串与反引号中的字面量组合。

 位于${ }之间的内容都被当作JavaScript表达式来解释。而位于这对花括号之外的则是常规字符串字面量。括号内的表达式会被求值,然后转换为字符串并插入模板中,替换美元字符、 花括号以及花括号中的所有内容。

标签化模板字面量

如果在开头的反引 号前面有一个函数名(标签),那么模板字面量中的文本和表达式 的值将作为参数传给这个函数。“标签化模板字面量”(tagged template literal)的值就是这个函数的返回值。这个特性可以用 于先对某些值进行HTML或SQL转义,然后再把它们插入文本。

ES6提供了一个内置的标签函数:String.raw(),函数返回反引号中未经处理的文本,即不会处理任何反斜杠转义。

 即使标签化模板字面量的标签部分是函数,在调用这个 函数时也没有圆括号。在这种非常特别的情况下,反引号字符充当 开头和末尾的圆括号。

5.模式匹配

JavaScript定义了一种被称为正则表达式(或RegExp)的数据 类型,用于描述和匹配文本中的字符串模式。RegExp不是 JavaScript中的基础类型,但具有类似数值和字符串的字面量语法,因此它们有时候看起来像是基础类型,常用于文本处理。

一对斜杠之间的文本构成正则表达式字面量。这对斜杠中的第 二个后面也可以跟一个或多个字母,用于修改模式的含义。

RegExp对象定义了一些有用的方法,而字符串也有接收RegExp 参数的方法。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值