@antofa

Чему равна строка при сравнении с числом в Javascript?

При сравнении строк используются численные коды символов, которые берутся из Unicode таблицы. Смотрю по таблице символов в Windows код 'A', он равен U+0041 = 65(10). То же самое говорит и 'A'.charCodeAt(0).

Но при таком сравнении 'A'==65 я получаю false. Так чему же все таки равно 'A' в таком случае?
  • Вопрос задан
  • 239 просмотров
Решения вопроса 2
@GreatRash
Читаем спецификацию:


The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:

...

5. If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.

Чиаем, что за ToNumber такой:


ToNumber applied to Strings applies the following grammar to the input String. If the grammar cannot interpret the String as an expansion of StringNumericLiteral, then the result of ToNumber is NaN.

Следовательно JS читает ваше выражение так:

'A' == 65
// =>
Number('A') == 65
// =>
NaN == 65
// =>
false

Всё просто и понятно :)
Ответ написан
abyrkov
@abyrkov
JavaScripter
Тут два небольших ньюанса:
1. По кодам сравниваются лишь строка со стокой.
2. При сравнении числа приводятся к строке, если мы сравнимаем на ==, !=, и строки к числам - <, >, >=, <=
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Потому что перед тем как сравнивать, нужно привести к единому типу вручную.
"A".charCodeAt(0) == 65; //true
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы