Javascript 关于字符和未定义字符的非常奇怪的问题

Javascript 关于字符和未定义字符的非常奇怪的问题,javascript,jquery,html,Javascript,Jquery,Html,好的,检查这个: 请访问此页面: 打开JavaScript控制台 测试1: 复制粘贴此内容并按enter:window.DB[ar,i>í] 它将显示如下内容: Object {rootChange: "í", subjuntivo: Array[4], rootFind: "i", gerundio: "$ando", indicativo: Array[5]…} 测试2: 现在,复制粘贴这个它看起来完全一样,等等DB[ar,i>i] 答复是: undefined 好的,那么你能给我解释

好的,检查这个:

请访问此页面: 打开JavaScript控制台 测试1:

复制粘贴此内容并按enter:window.DB[ar,i>í]

它将显示如下内容:

Object {rootChange: "í", subjuntivo: Array[4], rootFind: "i", gerundio: "$ando", indicativo: Array[5]…}
测试2:

现在,复制粘贴这个它看起来完全一样,等等DB[ar,i>i]

答复是:

undefined

好的,那么你能给我解释一下发生了什么以及如何解决吗?把第二个字符串转换成第一个字符串?

这是因为第一个字符串的长度是7,而不是6。第一个字符串的最后一个字符实际上是两个看起来像一个的字符。试试这个:

var a = "ar,i>í", b = "ar,i>í";
for (var i = 0; i < a.length; ++i) {
  console.log(a[i]);
}
for (var i = 0; i < b.length; ++i) {
  console.log(b[i]);
}

没什么奇怪的,他们是看起来一样的不同角色。如果将它们转换为十六进制:

í=69 cc 81 í=c3 ad

所以,用另一个替换其中一个。
首先,为什么要使用这样的字符?

如果您查看这两种字符的ASCII字符编码:

第一个是:

[119, 105, 110, 100, 111, 119, 46, 68, 66, 91, 34, 97, 114, 44, 105, 62, 105, 769, 34, 93]
二是:

[119, 105, 110, 100, 111, 119, 46, 68, 66, 91, 34, 97, 114, 44, 105, 62, 237, 34, 93]
因此,第二个示例缺少与769对应的unicode字符部分

使用我使用的代码检查您自己:

var arr = [];
for (var i = 0, l = s.length; i < l; i++) {
  arr.push(s.charCodeAt(i));
}

console.log(arr);

@DesertIvy一个在开始时初始化的自定义对象你为什么要使用这样的属性名称开始?因为它们不一样:í===í,它们是不同的字符。这个问题太本地化了。firefoxOMG可以正常工作。好吧,这真是个惊喜。是否有任何现实的方法可以将字符串转换为具有较少字符数的版本?如果您是指使用任何其他类似字符,则可能没有。但这个确切的情况可以这样解决:str.replace/í/g,í。