Стать программистом. Часть 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" может быть любая другая строка с цифирным значением. Суть операции с делением на ноль от этого не поменяется.