Выразительный JavaScript - [6]
>0
, а >“5”
становится >5
(из строки – в число). Однако в третьем выражении >+
выполняет конкатенацию (объединение) строк, из-за чего >1
преобразовывается в >“1”
(из числа в строку).Когда что-то неочевидное превращается в число (к примеру, >“пять”
или >undefined
), возвращается значение >NaN
. Последующие арифметические операции с >NaN
опять получают >NaN
. Если вы получили такое значение, поищите, где произошло случайное преобразование типов.
При сравнении величин одного типа через >==
, легко предсказать, что вы должны получить true, если они одинаковые (исключая случай с >NaN
). Но когда типы различаются, JavaScript использует сложный и запутанный набор правил для сравнений. Обычно он пытается преобразовать тип одной из величин в тип другой. Когда с одной из сторон оператора возникает >null
или >undefined
, он выдаёт >true
только если обе стороны имеют значение >null
или >undefined
.
>console.log(null == undefined);
>// → true
>console.log(null == 0);
>// → false
Последний пример демонстрирует полезный приём. Когда вам надо проверить, имеет ли величина реальное значение вместо >null
или >undefined
, вы просто сравниваете её с >null
при помощи >==
или >!=
.
Но что, если вам надо сравнить нечто с точной величиной? Правила преобразования типов в булевские значения говорят, что >0
, >NaN
и пустая строка >“”
считаются >false
, а все остальные – >true
. Поэтому >0 == false
и >“” == false
. В случаях, когда вам не нужно автоматическое преобразование типов, можно использовать ещё два оператора: >===
и >!==
. Первый проверяет, что две величины абсолютно идентичны, второй – наоборот. И тогда сравнение >“” === false
возвращает >false
.
Рекомендую использовать трёхсимвольные операторы сравнения для защиты от неожиданных преобразований типов, которые могут привести к непредсказуемым последствиям. Если вы уверены, что типы сравниваемых величин будут совпадать, можно спокойно использовать короткие операторы.
Короткое вычисление логических операторов
Логические операторы >&&
и >||
работают с величинами разных типов очень странным образом. Они преобразуют величину с левой стороны оператора в булевскую, чтобы понять, что делать дальше, но в зависимости от оператора и от результата этого преобразования, возвращают оригинальное значение либо левой, либо правой части.
К примеру, >||
вернёт значение с левой части, когда его можно преобразовать в >true
– а иначе вернёт правую часть.
>console.log(null || "user")
>// → user
>console.log("Karl" || "user")
>// → Karl
Такая работа оператора >||
позволяет использовать его как откат к значению по умолчанию. Если вы дадите ему выражение, которое может вернуть пустое значение слева, то значение справа будет служить заменой на этот случай.
Оператор >&&
работает сходным образом, но наоборот. Если величина слева преобразовывается в >false
, он возвращает эту величину, а иначе – величину справа.
Ещё одно важное их свойство – выражение в правой части вычисляется только при необходимости. В случае >true || X
не важно, чему равно >X
. Даже если это какое-то ужасное выражение. Результат всегда >true
и >X
не вычисляется. Так же работает >false && X
– >X
просто игнорируется. Это называется коротким вычислением.
Оператор условия работает так же. Первое выражение всегда вычисляется, а из второго и третьего значения – только то, которое оказывается выбранным в результате.
Итог
Мы рассмотрели четыре типа величин JavaScript: числа, строки, булевские и неопределённые.
Эти величины получаются, когда мы пишем их имена (>true
, >null
) или значения (>13
, >“ёпрст”
). Их можно комбинировать и изменять при помощи операторов. Для арифметики есть бинарные операторы (>+
, >-
, >*
, >/
и >%
), объединение строк (>+
), сравнение (>==
, >!=
, >===
, >!==
, ><
, >>
, ><=
, >>=
) и логические операторы (>&&
, >||
), а также несколько унарных операторов (>-
для отрицательного значения, >!
для логического отрицания и >typeof
для определения типа величины).
Эти знания позволяют использовать JavaScript в качестве калькулятора, но и только. В следующей главе мы будем связывать эти простые значения вместе, чтобы составлять простые программы.
2. Структура программ
Сердце моё сияет ярко-красным светом под моей тонкой, прозрачной кожей, и им приходится вколоть мне десять кубиков JavaScript, чтобы вернуть меня к жизни (я хорошо реагирую на токсины в крови). От этой фигни у вас враз жабры побледнеют!
_why, Why's (Poignant) Guide to Ruby
В этой главе мы начнём заниматься тем, что уже можно назвать программированием. Мы расширим использование языка JavaScript за пределы существительных и фрагментов предложений к более-менее осмысленной прозе.
Выражения и инструкции
В первой главе мы создавали величины и применяли к ним операторы, получая новые величины. Это важная часть каждой программы, но только лишь часть.
Фрагмент кода, результатом работы которого является некая величина, называется выражением. Каждая величина, записанная буквально (например, >22
или >“психоанализ”
) тоже является выражением. Выражение, записанное в скобках, также является выражением, как и бинарный оператор, применяемый к двум выражениям или унарный – к одному.
Это часть красоты языкового интерфейса. Выражения могут включать другие выражения так же, как сложноподчинённое предложение состоит из простых. Это позволяет нам комбинировать выражения для создания вычислений любой сложности.
Жизнь современного человека плотно связана с видеоиграми. Даже если вы не играете сами, в вашем окружении наверняка найдутся заядлые геймеры, а новости из индустрии игр зачастую не обходят и вас стороной. Это положение дел приводит к вопросам: а что же такое видеоигры и какое место они занимают в жизни человека? Поиском ответов на них занимается дисциплина game studies. Александр Ветушинский – один из ведущих российских представителей этого направления исследований. Его книга «Игродром» – философское осмысление этапов развития игровой индустрии, анализ.
Человечество научилось собирать, обрабатывать и использовать в науке, бизнесе и повседневной жизни огромные массивы данных. Но что делать с данными, которых у нас нет? Допустимо ли игнорировать то, чего мы не замечаем? Британский статистик Дэвид Хэнд считает, что это по меньшей мере недальновидно, а порой – крайне опасно. В своей книге он выделяет 15 влияющих на наши решения и действия видов данных, которые остаются в тени. Например, речь идет об учете сигналов бедствия, которые могли бы подать жители бедных районов, если бы у них были смартфоны, результатах медицинского исследования, которые намеренно утаили или случайно исказили, или данных, ставших «темными» из-за плохого набора критериев для включения в выборку.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.