Javascript 为什么String.indexOf的功能是这样的?

Javascript 为什么String.indexOf的功能是这样的?,javascript,diacritics,Javascript,Diacritics,我试图根据用户输入的查询匹配一些文本。在遇到一些问题后,我发现了String.indexOf的这种相当奇怪的行为,我简直无法理解: 如果我尝试将一个不带变音符号的查询与一个带变音符号的字符串相匹配,它会起作用:(不确定为什么) 十一, 但是,将同一字符串与其后的另一个字母匹配不起作用: "brezzel cu brânză".indexOf("bran") -一, (在Chrome和Firefox中测试,行为相同) 这是一种我不知道的有记录的行为,还

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

如果我尝试将一个不带变音符号的查询与一个带变音符号的字符串相匹配,它会起作用:(不确定为什么)

十一,

但是,将同一字符串与其后的另一个字母匹配不起作用:

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

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


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

如果我没记错的话,js字符编码为2字节。但许多其他unicode字符编码为4字节。现在字符â是4个字节。前2个字节是a,这就是为什么第一种情况有效。使用escape功能查看:

escape("brezzel cu brânză")
"brezzel%20cu%20bra%u0302nza%u0306"
请注意
%20
是空格,后面是bra,然后是
%u0302
,它与前面的
a
一起编码
a

也许你能告诉我其余的。如果您想:

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

如果我没记错的话,js字符是用2个字节编码的。但许多其他unicode字符编码为4字节。现在字符â是4个字节。前2个字节是a,这就是为什么第一种情况有效。使用escape功能查看:

escape("brezzel cu brânză")
"brezzel%20cu%20bra%u0302nza%u0306"
请注意
%20
是空格,后面是bra,然后是
%u0302
,它与前面的
a
一起编码
a

也许你能告诉我其余的。如果您想:

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

a
不等于
a
brân
在字符串中,但
bran
不在字符串中如果这些字符在您看来相同(您的显示很奇怪),请在js控制台中运行一些代码
console.log(“a”==“ȧ”)
Array.from(“brȧnză”)
显示字符串中的确切内容。源字符串中的“a”字符由普通拉丁语“a”加上“组合扬抑重音”字符Unicode代码点770(十进制)组成。相关:
a
不等于
a
brân
在字符串中,但
bran
不在字符串中如果这些字符在您看来相同(您的显示很奇怪),请在js控制台中运行一些代码
console.log(“a”==“ȧ”)
Array.from(“brȧnză”)
显示字符串中的确切内容。源字符串中的“a”字符由普通拉丁语“a”加上“组合扬抑重音”字符Unicode代码点770(十进制)组成。相关:和。