文本格式

本章介绍如何在JavaScript中使用字符串和文本。

JavaScript的字符串类型用于表示文本数据。它是一组16位无符号整数值(UTF-16代码单位)的“元素”。String中的每个元素都在String中占据一个位置。第一个元素位于索引0处,第二个元素位于指数1处,依此类推。String的长度是其中的元素数。可以使用字符串文字或字符串对象创建字符串。

字符串常量

您可以使用单引号或双引号创建简单字符串:

js公司
“foo”“酒吧”

可以使用转义序列创建更高级的字符串:

十六进制转义序列

\x后面的数字被解释为十六进制数字。

js公司
“\xA9”//“©”

Unicode转义序列

Unicode转义序列要求后面至少有四个十六进制数字\单位.

js公司
“\u00A9”//“©”

Unicode码位转义

使用Unicode代码点转义,可以使用十六进制数转义任何字符,以便可以使用最多为0x10FFFF(法国法郎)对于简单的Unicode转义,通常需要分别编写代理项的一半以获得相同的结果。

另请参见字符串.fromCodePoint()String.prototype.codePointAt().

js公司
“\u{2F804}”//简单的Unicode转义也是如此“\uD87E\uDC04”

字符串对象

这个字符串对象是字符串基本数据类型的包装器。

js公司
const foo=新字符串(“foo”);//创建字符串对象console.log(foo);//[字符串:'foo']foo类型;//'对象'

您可以调用字符串对象的字符串文字值-JavaScript自动将字符串文字转换为临时字符串对象,调用该方法,然后丢弃临时字符串对象。您还可以使用长度属性。

除非特别需要使用字符串对象,因为字符串对象可能有违反直觉的行为。例如:

js公司
const firstString=“2+2”;//创建字符串文字值const secondString=新字符串(“2+2”);//创建String对象eval(firstString);//返回数字4eval(secondString);//返回包含“2+2”的String对象

A类字符串对象有一个属性,长度,指示字符串中UTF-16代码单位的数量。例如,以下代码分配hello长度值13,因为“Hello,World!”有13个字符,每个字符由一个UTF-16代码单元表示。您可以使用数组括号样式访问每个代码单元。不能更改单个字符,因为字符串是不可变的类数组对象:

js公司
const hello=“你好,世界!”;const helloLength=hello.length;hello[0]=“L”;//这没有效果,因为字符串是不可变的您好[0];//这将返回“H”

Unicode标量值大于U+FFFF的字符(例如一些罕见的中文/日语/朝鲜语/越南语字符和一些表情符号)存储在UTF-16中,每个字符有两个代理代码单元。例如,包含单个字符U+1F600“表情笑脸”的字符串长度为2。使用方括号访问此类字符串中的单个代码单元可能会产生不良后果,例如字符串中的代理代码单元不匹配,这违反了Unicode标准。(在修复MDN错误857438后,应将示例添加到此页面。)另请参阅字符串.fromCodePoint()String.prototype.codePointAt().

A类字符串对象有多种方法:例如,那些返回字符串本身的变体的方法,例如子串将字符串转换成大写.

下表总结了字符串物体。

方法字符串

方法 描述
字符(),字符代码(),代码指针() 返回中指定位置的字符或字符代码字符串。
索引(),lastIndexOf() 返回指定子字符串在字符串或last中的位置指定子字符串的位置。
用()启动,结尾With(),包括() 返回字符串是否开始、结束或包含指定的字符串。
concat() 组合两个字符串的文本并返回一个新字符串。
拆分() 拆分a字符串对象转换为字符串数组将字符串分隔为子字符串。
切片() 提取字符串的一部分并返回新字符串。
子字符串(),substr() 通过指定开始和结束索引或开始索引和长度。
匹配(),匹配全部(),替换(),全部替换(),搜索() 使用正则表达式。
至下壳体(),至UpperCase()

分别返回全部小写或全部大写的字符串。

规范化() 返回调用字符串值的Unicode规范化形式。
重复() 返回由重复给定时间。
修剪() 修剪字符串开头和结尾的空白。

多行模板文字

模板文字是允许嵌入表达式的字符串文本。可以使用多行字符串和字符串插值功能。

模板文字用反勾号括起来(严肃的口音)字符(`)而不是双引号或单引号。模板文字可以包含占位符。这些由美元符号和花括号表示(${表达式}).

多线路

在源中插入的任何新行字符都是模板文字的一部分。使用普通字符串时,必须使用以下语法才能获得多行字符串:

js公司
控制台日志(“”字符串文本行1\n“\字符串文本行2“,);//“字符串文本行1//字符串文本第2行“

要获得与多行字符串相同的效果,现在可以编写:

js公司
console.log(`string文本行1字符串文本行2`);//“字符串文本行1//字符串文本行2“

嵌入式表达式

为了在普通字符串中嵌入表达式,可以使用以下语法:

js公司
常数5=5;常数10=10;控制台日志(“十五是”+(五+十)+“而不是”+(2*五+十”+“。”,);//“十五是十五,不是二十。”

现在,使用模板文字,您可以使用语法加糖替换,这样更容易阅读:

js公司
常数5=5;常数10=10;log(`Fifteen是${5+ten},而不是${2*five+ten}.`);//“十五是十五,不是二十。”

有关更多信息,请阅读模板文字在中JavaScript引用.

国际化

这个国际对象是ECMAScript Internationalization API的命名空间,该API提供对语言敏感的字符串比较、数字格式以及日期和时间格式。施工人员国际整理机,国际数字格式、和国际日期时间格式对象是的属性国际对象。

日期和时间格式

这个国际日期时间格式对象用于设置日期和时间的格式。以下是美国使用的英语日期格式。(另一个时区的结果不同。)

js公司
//2014年7月17日00:00:00 UTC:const july172014=新日期(“2014-07-17”);常量选项={年份:“2位数”,月份:“2位数”,日期:“2位数”,小时:“2位数”,分钟:“2位数”,timeZoneName:“短”,};const americanDateTime=新的Intl.DateTimeFormat(“en-US”,选项).format;//本地时区因您的设置而异//在CEST中,记录时间:2014年7月17日02:00 AM GMT+2//在PDT中,日志:07/16/14,05:00 PM GMT-7console.log(美国日期时间(2014年7月17日));

数字格式

这个国际数字格式对象用于格式化数字,例如货币。

js公司
const gasPrice=新的Intl.NumberFormat(“en-US”{style:“货币”,货币:“USD”,最小分数位数:3,});console.log(gasPrice.format(5.259));//$5.259const hanDecimalRMB InChina=新的国际数字格式(“zh-CN-u-nu-hanidec”{style:“货币”,货币:“CNY”,});console.log(hanDecimalRMBInChina.format(1314.25));//一,三一四.二五

排序规则

这个国际整理机对象用于比较和排序字符串。

例如,在德语中实际上有两种不同的排序顺序,电话簿词典。电话簿排序强调声音,就好像在排序之前,“ä”、“ö”等被扩展为“ae”和“oe”等。

js公司
const names=[“Hochberg”、“Hönigswald”、“Holzman”];const germanPhonebook=新的Intl.Collator(“de-de-u-co-phonebk”);//就像排序[“Hochberg”、“Hoenigswald”、“Holzman”]:console.log(names.sort(germanPhonebook.compare).jin(“,”));//霍克伯格、霍尼斯瓦尔德、霍尔兹曼

一些德语单词与额外的元音变音符共轭,所以在字典中,可以忽略元音变调(除非单词排序不同只有通过元音变音符:肖恩之前肖恩).

js公司
const germanDictionary=新的Intl.Collator(“de-de-u-co-dict”);//就像排序[“Hochberg”、“Honigswald”、“Holzman”]:console.log(names.sort(germanDictionary.compare).join(“,”));//“霍克伯格、霍尔兹曼、霍尼斯瓦尔德”

有关国际API,另请参阅介绍JavaScript国际化API.