Стать программистом. Часть 8. Основы JavaScript для абсолютных новичков!

Стать программистом. Часть 8. Основы JavaScript для абсолютных новичков!

Доброго времени суток, друзья! Информация изложенная в предыдущем Уроке раскрыла для нас основы взаимодействия переменных с типами String(Строка) и Number(Число). Мы узнали, что такое строго типизируемые языки программирования и почему JavaScript к ним не относится. Приобрели знания о неявном преобразовании типов переменных, которые осуществляет JavaScript каждый раз, когда переменные разного типа решают произвести арифметические операции друг с другом. А также вывели два правила взаимодействия строковых и числовых переменных.

Однако в конце урока сделали маленькую оговорку:

Оба этих правила имеют маленькую оговорку. Они работают только в тех случаях, когда JavaScript может преобразовать число в строку, а строку в число. Вернее, загвоздка именно со строкой. Потому что число JavaScript всегда может привести к типу String (Строка).

И даже привели пример строки, к которой данная оговорка относится. В нашем сегодняшнем уроке, мы рассмотрим манипуляции с переменными типа String(Строка), для которых правила из предыдущего урока подходят частично. А также продолжим рассматривать примеры взаимодействия переменных других типов.

УРОК 8. Взаимодействие переменных разного типа. часть II.

Давайте для начала приготовим наши index.html и core.js файлы и завершим предыдущий урок. Установим, так сказать, опытным путем, как же все-таки будут между собой взаимодействовать переменные с типом строка и число в случае, когда строка вместо цифры будет содержать буквы. То есть как будет действовать JavaScript, например, в таких ситуациях:

Мы видим, что переменная строкового типа - "а" имеет в своем значении буквенный набор. В отличие от переменных из предыдущего урока, которые несмотря на что что имели строковый тип, несли в своем значении цифры и зачастую имели вид var a = "13"; .

Из предыдущих уроков мы помним, что при попытке сложить число и строку, JavaScript выберет переменную с числовым типом, неявно преобразует ее тип в строковый и попросту склеит эти строки между собой. Этот алгоритм вполне применим и к операциям, в которых участвуют строковые переменные с буквенным значением.

Поэтому результатом, который будет записан в переменную "с" будет строка вида "привет2". Давайте проверим это в браузере c помощью alert() ;

Обновим окно браузера и увидим, что наш вывод был абсолютно верен

А что же касательно других арифметических операций, приведённых в коде выше? Все они в своем результате получат значение "NaN", то есть "не число".

Дело в том, что для JavaScript’у не представляет никакой сложности преобразовать строку "13" в число 13, а строку "-10" - в число -10. JavaScript достаточно умен для того, чтобы понять какая именно цифра указана в данных строках. Но вот в строке "привет", или любой другой буквенной строке, нет ни малейшего намека на цифры. Поэтому JavaScript неявно присваивает такой строке тип NaN, и записи вида:

JavaScript неявно преобразует в:

На такой случай в JavaScript есть правило:

Любая арифметическая операция (за ислючением операции "сложения"), в которой участвует NaN в своем результате тоже получит NaN.

Давайте проверим это в браузере:

Как мы можем видеть - все действительно так, как мы и описали. На этом логика взаимодействия между переменными с типом String (Строка) и Number(Число) при неявном преобразовании типов заканчивается.

А мы двиагемся дальше. И на очереди у нас логический тип переменных - Boolean.

Boolean и String(Строка).

В принципе, любое взаимодействие между переменными строкового типа с переменными булевского типа становятся предельно ясны, если вспомнить ассоциацию из Урока № 6. Вот цитата:

Для того чтобы понять логику арифметических операций с переменными булевского типа нужно проделать маленький трюк - провести в уме ассоциацию значения "true" c "1", а значения "false" c "0".

Вооружённые этим знанием мы получаем почти идентичное положение дел в ситуации оперирования переменными типа String с переменными типа Boolean, тому, что мы имели в ситуации оперирования переменными типа String с переменными типа Number. Ведь по сути операции вида

При неявном преобразовании булевского типа будут иметь вид:

Единственная разница будет заключатся в том, что в зависимости от ситуации при взаимодействии переменных типа String с переменными типa 'Number' JavaScript неявно преобразовывал либо переменную с числовым типом, либо - переменную со строковым типом. В случаях же, приведенных выше JavaScript преобразует всех участников арифметических выражений. Поэтому окончательно, операции, описанные выше, JavaScript неявно приведет к виду:

Таким образом, переменны получать следующие значения: "a" - 11, "b" - 0, "c" - 4, "d" - 9.

Давайте проверим это на практике:

Результат выполнения кода в браузере:

Результаты в сообщениях совпали с результатами, приведенными раньше. Аналогично, когда переменная строкового типа вместо цифры в своем значении будет содержать слово, операции следующего вида:

Все до единой в своих результатах получать NaN. Ибо в своём неявном преобразовании JavaScript будет читать код выше как:

А из правила касательно участия NaN в арифметических операциях, описанного выше, мы знаем, что результатом таких операций будет все тот же NaN.

Давайте проверим на практике:

. ровно то, что и ожидалось.

Осталось рассмотреть всего две операции переменных типа Boolean с переменными типа String.

Первая это операция "сложения":

Операция сложения между Boolean и String протекает ровно также, как и операция сложения между String и Number. JavaScript выделит переменные с логическим типом, неявно переведет их к строковому типу и как результат склеит всех участников операции в одну строку. То есть переменные из кода выше получат следующие значения:

"a" = "привет true", "b" = "голосовчане false", "с" = "false13", "d" = "true10".

Другими словами, JavaScript неявно преобразует булевский true в строку вида "true", а булевский false соответственно в строку вида "false".

Вторая операция, на которую стоит обратить внимание имеет вид:

Если мы выведем результат такой операции в браузере:

Почему в результате выдаётся "Infinity"? Потому, что согласно информации которую мы рассмотрели выше, операция var a = '12' / false; после неявного преобразования будет восприниматься JavaScript как var a = 12 / 0; . То есть мы имеем дело с делением на ноль, который рассматривали в предыдущих уроках. Очевидно, что вместо строки "12" может быть любая другая строка с цифирным значением. Суть операции с делением на ноль от этого не поменяется.

📎📎📎📎📎📎📎📎📎📎