• Кто хорошо знает javascript, элементарный вопрос?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Есть строки, а есть числа. Это не одно и то же и работает по-разному.

    Почитать тут:
    1. Типы данных
    2. про Числа и parseInt()
    3. Преобразование типов


    А если не читать?
    Чтобы не читать, а разбираться с проблемой на месте, можно смотреть, что именно происходит.
    Повсюду навставлять console.log(), через который выводить значения и типы. Или дебаггером в Инструментах разработчика в браузере останавливать в каждой строчке и смотреть в какой переменной что лежит.

    Ключевые вопросы:
    • что возвращает prompt() – какой тип
    • что происходит если к строке прибавить строку "тос" + "тер"
    • что будет если в строке лежит число "2" + "2"
    • чем отличается от деления "2" / "2"

    Поздравляю, вы на верном пути!

    p.s. на чём летаешь? )
    Ответ написан
    4 комментария
  • Кто хорошо знает javascript, элементарный вопрос?

    enkryptor
    @enkryptor
    software developer (TS/JS, python, C#)
    Если совсем в двух словах. Интерпретатор делает не то, что мы от него хотим, а то, что мы от него запросили. А знаком "плюс" в JS можно запросить две разные операции.

    Одна — это склеивание строк: "aaa" + "bbb" = "aaabbb"

    Вторая — это арифметическое сложение: 333 + 222 = 555

    В остальной арифметике — деление, вычитание и т.п. — такой двойственности нет. Нельзя, например, вычесть одну строку из другой: "aaa" - "bbb" = ?, поэтому для строк при использовании знака "минус" JS автоматически приводит строку к числу и мы получаем ожидаемый результат: "333" - "222" = 111

    Но для знака "плюс" такое не работает, т.к. интерпретатор не знает, что нам нужно, и делает то, что ему сказали:
    333 + 222 = 555
    
    "333" + "222"  = "333222"

    Поэтому приведение строки к числу должны запросить мы сами явно. Для этого мы и вызываем функцию parseInt(), которая делает такое приведение, т.е. превращает строку в число.
    Ответ написан
    1 комментарий