2014-03-12 5 views
1

Как это может быть возможным:charCodeAt не ведет себя, как и ожидалось

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. Это правда, когда я положил a и ab. Но когда я вставляю эти строки, он просто ломается.

Некоторые говорили, что это может быть проблема с кодировкой. Но поскольку он отлично работает, когда в строковом литерале есть только один символ, я предполагаю, что кодировка не имеет к этому никакого отношения.

(Этот вопрос решает основную проблему в моих предыдущих вопросах Не волнуйтесь, я удалил их уже.).

+1

'string2.substring (0,1)' фактически дает пустую строку – baldrs

+0

@baldrs - [Я проверял] (http://jsfiddle.net/DerekL/BLGYu/), он не пуст. Он просто имеет нулевую ширину. –

+2

'' .length' yields '4' :) –

ответ

6

В JavaScript строки обрабатываются символами вместо байтов, но только если они могут быть выражены в 16-битных кодовых точках.

Большинство символов не будут вызывать никаких проблем, но в этом случае они не «подходят», и поэтому они занимают 2 символа до JavaScript.

В этом случае вам нужно сделать:

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

Для получения дополнительной информации о причудливости Unicode см UTF-8 Everywhere.

+0

Не должен ли ваш комментарий читать '//" "'? – halex

+3

@halex Я не понимаю, что вы имеете в виду. –

+0

'string2.substring (0, 2)' дает '' ''. См. Http://jsfiddle.net/B9Xdk/3/ – halex

0

Вы можете использовать метод для сравнения 2 строки:

string1.localeCompare(string2); 
+1

Этот метод широко поддерживается, к сожалению, если код будет выполнен в браузере. – baldrs

0

подстроки параметры - это индекс, где он начинается, и конец, где, как если бы вы изменили его на substr, параметры - это индекс, где начинать и сколько символов.

Смежные вопросы