gottagetsom
@gottagetsom
инди разработчик

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

Помогите пожалуйста только доступным языком!
Почему когда я пишу код вот так у меня два числа просто рядом
<meta charset="utf8">
<script type="text/javascript">
	var a =  prompt ("число");
	var b =  prompt ("число");
	var c = a / b
	alert (c)
	alert  (c + a)
</script>

когда вот так это считается верным и все работает и додает числа
<meta charset="utf8">
<script type="text/javascript">
	var a =  prompt ("число");
	var b =  prompt ("число");
	var c = a / b
	a=parseInt(a)
	b=parseInt(b)
	alert (c)
	alert  (c + a)
</script>


но и работает также если написать вот так
<meta charset="utf8">
<script type="text/javascript">
	var a =  prompt ("число");
	var b =  prompt ("число");
	var c = a / b
	a=parseInt(a)
	b=parseInt(b)
	alert (c)
	alert  (c + a)
</script>


И расскажите пожалуйста что значит parseInt простыми словами.
Спасибо!
  • Вопрос задан
  • 165 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Есть строки, а есть числа. Это не одно и то же и работает по-разному.

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


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

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

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

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

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

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

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

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

"333" + "222"  = "333222"

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

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

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