string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?

通过可见字符建模

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

f27d78cf30eb27537b40525b3628bc68.png

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

const message = 'Hello!';

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

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

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

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

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

怎么会这样呢?

e3d1dd8bb670643dc24cc2fc58b470e4.png

这是因为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 = 'Hello!';message === 'Hello!'; // => truemessage.length;       // => 6

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

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

const smile = '��';smile === ''; // => truesmile.length;  // => 2

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

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

const message = 'Hello!';const smile = '';[...message].length; // => 6[...smile].length;   // => 1
1818da992712d6f831adee55a633e166.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言二维数组代码,C语言之二维数组(示例代码)

二维数组及其指针1 ) 在了解二维数组之前,我们先来了解一维数组及其指针我们知道,一维数组中:数组名代表-->数组首元素的首地址(千万不要认为是数组的首地址(&a),绝对不是)在内存中,该代码的表现形式如下图&…

颜宁分享干货:给实验室博士的一些忠告

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:颜宁微博nyouyou,作者:颜宁前几日,颜宁在微博上与大家分享自己做实验记录的心得。在此贴出,与大家分享~从我进Shi Lab的第一天,就被导师灌输:好…

研发考核难的本质是因为这三个特点

大家好,我是Z哥。我坦白,这篇是早就写好的库存文章,包括上周的那篇也是。原因是最近跳槽了,到新公司忙得飞起,都没时间写文章。还好我之前未雨绸缪准备了几篇提前写好的文章作为余量~我尽量能保持不断更&am…

点击User Profile Service Application 报错

给客户部署的MOSS2010 SP1版本,部署完毕后,发现点击User Profile Service Application服务进行配置的时候,总是报错,上网查了一下,发现原来是微软的一个补丁包没有安装,于是下载了这个几乎1G的补丁包&#…

剑指offer-面试题13.在O(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 链表节点与函数的定义如下。 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。 然后使得该节点的next指向删除节点的next即可,这样看来删除一个节点 的复杂度为O(n)…

c语言程序stm8s,stm8s的c语言编程例程

stm8s的c语言编程例程实例一:控制灯的亮灭(或者蜂鸣器响,只要连接相应端口就可以了):#i nclude "stm8s.h"〃头文件#defi ne ulong un sig ned long///void delay( ulong i){ulo ng j;for(j0;j{;}} 延时函数void mai n( …

python画图比赛_Python选修课第二届Turtle绘图大赛

20181101173,荀梓恒20181101197,叶普旭代码如下:import turtle as tt.setup(width0.5, height0.75, startxNone, startyNone)t.hideturtle()t.speed(10)t.pensize(2)t.penup()t.goto(100,200)t.pendown()t.setheading(90)t.begin_fill()t.colormode(255)t.fillcolor…

为什么不能一次走遍哥尼斯堡的7座桥

全世界只有3.14 % 的人关注了爆炸吧知识数学的快乐到底有多简单今天,8岁表妹问了一个问题:看到这种类似11?的问题,超模君几乎不用思考就已经知道答案。但为了体现让表妹系统的理解知识,所以我决定......发生在哥尼斯堡…

官宣,11月8号,.NET6+64位VS璀璨面世!

12号,.NET6 RC2发布,13号,VS2022 RC版发布,11月8号,.NET6VS2022C#10 正式版将同时发布,.NET开发将步入全新篇章,各种新语法、新框架、新技术都如约而至,令人期待!然而&am…

IUnknown接口QueryInterface函数介绍

一、COM组件的目标: COM组件的一个主要优势是:便于升级。 要实现这个优势需要满足一下两个条件: 1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。 2、为了更好的突出DLL的优势,还需要信息隐藏,即…

stc单片机c语言 pdf,STC单片机C语言程序设计 第13章 STC单片机C语言指针.pdf

STC单片机C语言指针主讲:何宾Email :hebinmail.buct.edu.cn2016.03C51编译器中指针的分类Cx51编译器支持使用字符“*”声明变量指针。C51编译器可以执行在标准C中所提供的所有操作。但是,由于8051独一无二的结构以及特点,C51编译器…

小猿学python_小猿圈python入门之转行零基础该如何学Python?

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家解决一下疑惑。学习Python难吗&am…

dojo Quick Start/dojo入门手册--json

那要是我想更换获取到的数据类型,比如json?xml?修改handleAs即可,如: handleAs: "json" dojo.xhrGet({ url: "http://localhost/hello/sayHello.jsp", handleAs: "json", load…

Python-技巧

0.推荐的扩展 requests urilib的替代品 BeautifulSoup4 解析HTML代码 rq 任务队列 selenium 自动化测试工具,模拟浏览器 1.sys.modules, 根据已加载的模块创建对象, 其中 page 为类名 if hasattr(sys.modules[__name__], page):setattr(self, page, getattr(sys.mod…

暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...

全世界只有3.14 % 的人关注了爆炸吧知识提高版,来了!这一份大部分人都没有见过的资料。它是我国出版的第一套数学竞赛的系列图书。前段时间,超模君给大家分享了这一系列的初中版奥数基础篇,得到了大家热烈的反响。于是&#xff0c…

COSCon21 开源文化 (GL) 论坛介绍

“ 点击蓝字 / 关注我们 ”| 作者、编辑:袁睿斌| 设计:朱亿钦、宋传琪第六届中国开源年会 (COSCon21) 将于 10月30-31日 由开源社举办。本次年会重新回归线下,让小伙伴们的面基成为了可能。届时,北京、上海、深圳、成都、珠海、大…

pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五

目标在这里,你将学习如何读取图像,如何显示图像以及如何将其保存回去你将学习以下功能:cv.imread(),cv.imshow(),cv.imwrite()(可选)你将学习如何使用Matplotlib显示图像使用OpenCV读取图像使用cv.imread()函数读取图像…

android wifi

<!-- 以下是使用wifi访问网络所需要的权限 --> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name"android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:n…

1.5.2 在IIS上配置ASP.NET(转)

1.5.2 在IIS上配置ASP.NET 在服务器上部署ASP.NET网站时&#xff0c;需要.NET的运行环境.NET Framework。.NET Framework类似于Java的JDK&#xff0c;包含有.NET程序运行环境和命令行编译工具。如果服务器上没有安装.NET Framework&#xff0c;这就需要从微软网站下载&#xf…

51单片机外部地址c语言,cx51与c语言对单片机内部和外部资源变量和地址的定义是否兼容?为什么...

span namewhlm idwhlm原因:classpath没有设置好系统变量->新建->变量名&#xff1a;CLASSPATH 变量值&#xff1a;.;%JAVA_HOME%\lib(CLASSPATH中有一英文句号“.”后跟一个分号&#xff0c;表示当前路径的意思)在Classpath里面你可以直接指定一个包名&#xff0c;比如你…