为什么String.indexOf像这样起作用?

问题描述

我正在尝试根据用户输入的查询来匹配一些文本。遇到一些问题后,我发现String.indexOf的这种相当奇怪的行为我根本无法理解:

如果我尝试将不带变音符的查询与带变音符的字符串进行匹配,它将起作用:(不确定原因)

"brezzel cu brânză".indexOf("bra")

11

但是将相同的字符串与后面的另一个字母匹配是行不通的:

"brezzel cu brânză".indexOf("bran")

-1

(在Chrome和Firefox中均经过测试,行为相同)

这是我不知道的记录行为,还是这里到底发生了什么?

解决方法

如果我没记错的话,js字符以2个字节编码。但是许多其他Unicode字符编码为4个字节。现在charâ是4个字节。前2个字节是a,这就是第一种情况起作用的原因。使用转义功能查看:

escape("brezzel cu brânză")
"brezzel%20cu%20bra%u0302nza%u0306"

看到%20是空格,然后是bra,然后是%u0302,它与前一个a一起编码

可能您可以告诉其他人。如果需要,请对其进行测试:

'a' + String.fromCharCode('0x0302') //â

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...