@ince

Почему логическое выражение возвращает символ?

Есть код для смены раскладки с латинской на кириллическую.
Вопрос стандартный для js: почему он работает?
Интересует строка
str_out += map[str_in.charAt(i)] || str_in.charAt(i);


Выражение map[str_in.charAt(i)] || str_in.charAt(i) последней по приоритету выполняет операцию логического ИЛИ,
соответственно возвращаемый результат должен быть логического типа, а именно true или false.
Почему он возвращает символ?

Сам код:
var map = {
    'q' : 'й', 'w' : 'ц', 'e' : 'у', 'r' : 'к', 't' : 'е', 'y' : 'н', 'u' : 'г', 'i' : 'ш', 'o' : 'щ', 'p' : 'з', '[' : 'х', ']' : 'ъ', 
    'a' : 'ф', 's' : 'ы', 'd' : 'в', 'f' : 'а', 'g' : 'п', 'h' : 'р', 'j' : 'о', 'k' : 'л', 'l' : 'д', ';' : 'ж', '\'' : 'э', 
    'z' : 'я', 'x' : 'ч', 'c' : 'с', 'v' : 'м', 'b' : 'и', 'n' : 'т', 'm' : 'ь', ',' : 'б', '.' : 'ю',
    'Q' : 'Й', 'W' : 'Ц', 'E' : 'У', 'R' : 'К', 'T' : 'Е', 'Y' : 'Н', 'U' : 'Г', 'I' : 'Ш', 'O' : 'Щ', 'P' : 'З', '[' : 'Х', ']' : 'Ъ', 
    'A' : 'Ф', 'S' : 'Ы', 'D' : 'В', 'F' : 'А', 'G' : 'П', 'H' : 'Р', 'J' : 'О', 'K' : 'Л', 'L' : 'Д', ';' : 'Ж', '\'' : 'Э', 
    'Z' : '?', 'X' : 'ч', 'C' : 'С', 'V' : 'М', 'B' : 'И', 'N' : 'Т', 'M' : 'Ь', ',' : 'Б', '.' : 'Ю'
};


function replaceEnChr(input){
    
    var str_in = $(input).val();
    var str_out = '';
    
    for (var i = 0; i < str_in.length; i++) {
        str_out += map[str_in.charAt(i)] || str_in.charAt(i);
    };

    return str_out;

};
  • Вопрос задан
  • 82 просмотра
Решения вопроса 2
Логические операторы
Хоть они и называются «логическими», но в JavaScript могут применяться к значениям любого типа и возвращают также значения любого типа.

Там же:
Значение ИЛИ
При этом оператор ИЛИ возвращает то значение, на котором остановились вычисления. Причём, не преобразованное к логическому типу.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Нет, если первый первый операнд логического ИЛИ приводится к true, то результатом будет первый операнд, иначе второй операнд.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект
28 апр. 2024, в 19:54
5000 руб./за проект