js中哪些是字符串的方法(JavaScript中的字符串string到底是什么)

通过可见字符建模

把JavaScript中的string当作字符序列来看待是最直观的,虽然这样并不准确。

js中哪些是字符串的方法(JavaScript中的字符串string到底是什么)(1)

以下代码示例中的字符串由5个字母和一个感叹号组成:

const message = Hello!;

如果把string当作是可见的字符序列,那么Hello!中的字符数是6:

const message = Hello!; message.length; // => 6

如果string中的字符都是ASCII字符,那么通过可见字符的方式对string建模效果很不错。

但是,如果string中出现了更加复杂的字符,比如,,,这时候会出现意想不到的的问题。

const smile = ; smile.length; // => 2

怎么会这样呢?

js中哪些是字符串的方法(JavaScript中的字符串string到底是什么)(2)

这是因为JavaScript将字符串视为码元(code unit)序列,而不是可见字符序列。

让我们更详细地了解JavaScript中的字符串。

按码元建模

The String type is the set of all ordered sequences of zero or more 16-bit unsigned integer values (“elements”). The String type is generally used to represent textual data in a running ECMAScript program, in which case each element in the String is treated as a UTF-16 code unit value.

简而言之,JavaScript中的string是一个数字序列。如果用UTF-16编码的码元来表示Hello!这个字符串:

const message = u0048u0065u006Cu006Cu006Fu0021; message === Hello!; // => true message.length; // => 6

因为具有6个码元,这对应于Hello!字符串中可见字符的数量。

基本多文种平面(Basic Multilangual Plane)中的字符使用一个UTF-16码元进行编码,但是非基本多文种平面(non-Basic Multilangual Plane)则使用一对不可分割的码元进行编码。

const smile = uD83DuDE00; smile === ; // => true smile.length; // => 2

该序列uD83DuDE00是一个特殊的对,称为代理对(surrogate pair

字符串迭代器认识代理对。当您调用字符串迭代器时(例如,使用spread运算符)...,它将代理对视为一个长度单位

const message = Hello!; const smile = ; [...message].length; // => 6 [...smile].length; // => 1

js中哪些是字符串的方法(JavaScript中的字符串string到底是什么)(3)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。