charCodeAt的行为不符合预期

时间:2014-03-12 08:18:10

标签: javascript char

这怎么可能:

var string1 = "", string2 = "";

//comparing the charCode
console.log(string1.charCodeAt(0) === string2.charCodeAt(0)); //true

//comparing the character
console.log(string1 === string2.substring(0,1));              //false

//This is giving me a headache.

<子> http://jsfiddle.net/DerekL/B9Xdk/

如果两个字符串中的字符代码相同,则通过比较字符本身应返回true。当我放入aab时,确实如此。但是当我输入这些字符串时,它就会破坏。

有些人说这可能是造成问题的编码。但是因为当字符串文字中只有一个字符时它完全正常,我认为编码与它无关。

(这个问题解决了我先前问题中的核心问题。不用担心我已经删除了它们。)

3 个答案:

答案 0 :(得分:6)

在JavaScript中,字符串由字符而不是字节处理,但前提是它们可以用16位代码点表示。

大多数字符都不会引起任何问题,但在这种情况下它们并不“适合”,因此就JavaScript而言它们占用2个字符。

在这种情况下,你需要这样做:

string2.substring(0, 2) // ""

有关Unicode怪癖的更多信息,请参阅UTF-8 Everywhere

答案 1 :(得分:0)

您可以使用该方法比较2个字符串:

string1.localeCompare(string2);

答案 2 :(得分:0)

子串参数是他开始的索引和结束,就好像你把它改成substr一样,参数是索引从哪里开始和多少个字符。