Сравнение строк

Добрый день.

Вопрос про сравнение строк:

console.log (“Арбуз”>“Абрис”) ----------- true
console.log (“Арбуз” > “абрис”) ----------false
console.log (“Анаконда” > “бук”) ----------false
console.log (“Босс” > “Ананас”) ----------- true

Почему?

Заранее благодарю за ответы.

думаю что из-за регистра букв, сейчас не вспомню но там где Дима давал ссылки на прочитку там это описано

1 лайк

тогда почему первое правда? там ведь >=, а строгое неравенство


http://learn.javascript.ru/types-intro68 вот тут

Сравниваются коды символов (а кода описаны в таблице utf). Порядок, в котором символы выстроены в таблице отличается от алфавитного.

'ё' > 'я'; // true, but expected false

Так как ё идет с utf-8 кодом больше, чем я.

Всячески избегай сравнения строк с помощью операторов больше-меньше.

1 лайк

хм…наверно забыл написать “=”

Конечно из-за регистра. Он сравнивает положение каждого символа и + нужно учитывать регист . Сравнение идет с лева на право.

Благодарю за пояснения.

При сравнении строк, сравнение просиходит побуквенно/посимвольно.
Тоесть, если у нас есть str1 и str2, то сравнение просиходит так:

str1[0] vs. str2[0]
str1[1] vs. str2[1]
str1[2] vs. str2[2]
...
str1[n] vs. str2[n]

до того момента пока символы не будут разными.
Теперь, как просиходит сравнение каждого символа. Проще говоря, каждый символ переводится в числовое значение, согласно Unicode кодировке, и суть сравнинея символов сводиться к сравнению двух чисел.
Пример.

    var str1 = "Арбуз";
    var str2 = "абрис";

// начинаем сравнивать первые символы: str1[0] и str2[0]

В JavaScript, как и в других языках програмирования есть функции, которые возвращает числовое значение символа. В JS это charCodeAt().

str1.charCodeAt(0);
> 1040
str2.charCodeAt(0);
> 1072

// Тоесть:
1040 < 1072
str1.charCodeAt(0) < str2.charCode(0)
str1[0] < str2[0]
str1 < str2

Если бы эти символы были равны, то сравниваються следующие символы попарно.

5 лайков