非常奇怪的问题与字符和未定义

时间:2014-07-22 13:29:48

标签: javascript jquery html

好的,请检查一下:

TEST 1:

复制粘贴(并按回车键):window.DB["ar,i>í"]

它将显示如下内容:

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

测试2:

现在,复制粘贴这个一个(它看起来完全一样,等等!):window.DB["ar,i>í"]

响应是:

undefined

好的,那么请你向我解释一下发生了什么以及如何解决(将第二个转换为第一个)?

3 个答案:

答案 0 :(得分:4)

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

í= 69 cc 81 í= c3 ad

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

答案 1 :(得分:2)

那是因为第一个字符串的长度是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]);
}

答案 2 :(得分:0)

如果您查看两者的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);