Конечно, компьютеры отлично справляются с вычислениями чисел. И когда дело касается простой математики, JavaScript довольно прямолинеен. Есть пять основных операций: сложение, вычитание, умножение, деление и остаток от деления. Ещё есть скобки, как и в обычной математике, которые помогают явно указывать последовательность вычислений.
Взгляните на это: 25 * 91. 25 и 91 называются операндами, а звёздочка - оператором умножения.
Вот немного более усложнённый пример: ((12 * 5) - 4) / 12.
В начале JavaScript производит умножение, затем вычитает 4, поскольку есть скобки, а потом делит результат на 12.
Все операторы здесь инфиксные: они находятся между операндами (в данном случае — между числами). Ещё есть префиксные операторы (например, знак минус, который обозначает отрицательное число: -5
) и постфиксные (например, быстрое увеличение на один: x++
). Мы изучим их позже.
В какой-то момент вы столкнётесь с необычной проблемой: если вы попытаетесь сложить 0.1 + 0.2 в JavaScript, результатом будет 0.30000-много-много-нулей-4, а не 0.3. Это потому что компьютеры хранят числа в другом формате. Глубоко внутри все числа — это множество единиц и нулей, подчинённых определённым правилам, и это не лучший формат для хранения любых чисел.
Это может показаться нелепым — почему мы позволяем компьютерам использовать такую плохую систему? На самом деле она не настолько плохая или глупая. Такой формат удобен для определённого набора задач и не слишком удобен для другого.
Также в JavaScript есть несколько терминов, которые нужны для формулировки определённых значений: разделите положительное число на 0 и получится "Бесконечность" — Infinity
; разделите отрицательное число на 0 и получится "-Бесконечность" — -Infinity
. В своих программах вы можете использовать Бесконечности как числа с другими операторами. Например, с Бесконечностью можно производить сложение.
Иногда вычисления не производят конкретного числа. Разделите 0 на строку и получится что-то не числовое. Нельзя сказать, что это ничто, это… просто не число. У JavaScript есть термин для такого понятия — NaN, который образован из "Not a Number" (не число).
Как и Бесконечность, NaN можно использовать в вычислениях с другими математическими операторами. Но Not a Number как бы всех подводит: если он присутствует в вычислении, результатом всегда будет NaN.
Вот случайный вопрос: какого размера Марс? Его радиус — 3390 километров, он почти в два раза меньше Земли. Но мы, конечно, заинтересованы там жить, поэтому нам важно, сколько у нас будет поверхности. Другими словами, какая площадь поверхности у Марса?
Может, вы помните формулу: площадь поверхности сферы равна 4πr2. r — это радиус, а π примерно 3.14.
Давайте вычислим это в JavaScript:
4 * 3.14 * 3390 * 3390;
Теперь представьте как вычислить площадь поверхности другой планеты. Например, Меркурия:
4 * 3.14 * 2440 * 2440;
Этот новый код точно такой же, как и предыдущий, изменился только радиус. Если мы продолжим в таком же стиле, нам понадобится писать значение π самим каждый раз. Так не пойдёт, мы не хотим повторений в своих программах.
Мы можем заставить компьютер "помнить", что такое π и использовать это в вычислениях. Такой механизм называется "константы". Давайте создадим новую константу со значением числа π:
const pi = 3.14;
const
— это специальное ключевое слово, после него — идентификатор — название вашей константы, затем знак равенства и значение.
Теперь мы можем писать "pi" вместо того, чтобы вводить вручную 3.14.
4 * pi * 3390 * 3390; // surface area of Mars
4 * pi * 2440 * 2440; // surface area of Mercury
Кстати, двойной слеш и текст после него — это комментарии: JavaScript просто игнорирует их и они не влияют на работу кода. Мы пишем комментарии для себя и других людей, чтобы легче понимать код.
Давайте поместим площадь поверхности Марса в другую константу:
const surface = 4 * pi * 3390 * 3390;
Теперь surface
это другой идентификатор, в нём хранится результат вычисления. Тогда как это вычисление произвелось? Ну, во-первых, JavaScript должен вспомнить что такое pi, а потом заменить его на число, значение:
4 * pi * 3390 * 3390;
4 * 3.14 * 3390 * 3390;
А затем идут умножения слева направо, потому что у нас нет скобок:
4 * 3.14 * 3390 * 3390;
12.56 * 3390 * 3390;
42578.4 * 3390;
144340776;
Мы можем вывести результат на экран с console.log: console.log(surface)
. Заметьте, что в этот раз мы не писали кавычки. Мы не будем выводить слово "surface". Это не строка. Мы выводим значение константы, называемой "surface".
Теперь ваша очередь. Переходите к тестам и упражнению. Вы узнаете как много энергии в вашем теле, благодаря Эйнштейну.
Стандарт es7
вводит новый оператор **
, полезный при возведении в степень:
2 ** 4; // 16
3 ** 2; // 9
Другой способ возвести число в степень:
Math.pow(2, 4); // 16
Math.pow(3, 2); // 9
Возможно у вас возник вопрос: "почему константы, а не переменные?". Константы гораздо проще, чем переменные. Они всегда однозначно определены и никогда не меняются. В школе и в ВУЗе, в математике и физике мы имели дело только с константами.
В будущих уроках вы увидите, что единственное место, где требуются переменные — это циклы. Практически во всех других случаях они не нужны, и их присутствие усложняет код (мы объясним это позже в курсе).
const pi = 3.14;
const e = 2.7;
const strange = pi * e;
console.log(strange); // => 8.478000000000002
https://repl.it/@hexlet/programming-basics-first-program-const
Арность — это количество аргументов. Операторы +
, -
, *
и /
применяются к двум операндам. В таком случае их арность составляет 2, поэтому мы можем называть эти операторы бинарными.
Есть ещё один оператор, который выглядит как двоичный минус, но он унарный (одинарный). Это когда -
используется для обозначения отрицательного числа, например -327
.
Ещё бывают тернарные (троичные) операторы, но вы их встретите позже.
Ассоциативность (или фиксированность) определяет, как операторы группируются при отсутствии скобок. Рассмотрим выражение a ~ b ~ c
. Если у оператора ~
левая ассоциативность, это выражение будет трактоваться как (a ~ b) ~ c
.
Рассмотрим следующий код:
const a;
console.log(a);
Что в этом случае выведется на экран? Современный JavaScript вообще не позволит вам создать константу без значения, но если позволит, полученный console.log выведет undefined
. Это специальный идентификатор.
Вы можете установить значение undefined
сами, вот таким способом:
const a = undefined;
Но самому этого делать не стоит.
+
, -
, *
, /
означают то, что вы думаете.%
— остаток от деления. Он вычисляет остаток от деления первого операнда на второй. Например, 11%5
это 1, а 10%2
это 0.Infinity
и -Infinity
.NaN
, который означает "не число" (Not a Number). Например: 0/"word"
это NaN
NaN
, то результатом всегда будет NaN
. Например: 120 + 5 / NaN
это NaN
const age = 39;
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт