Раздел операции над переменными: : их сложение - это важный момент в изучении JavaScript , так как полученные здесь знания будут применяться постоянно.

Из предыдущего раздела кое-что о переменных Вам уже известно: создание переменных, вывод на экран их значений и правила работы с именами переменных - этот материал Вам знаком.

Приступаем к выполнению операций над переменными: сложение, вычитание, умножение и деление. И начнём, пожалуй, с чисел.

То есть с переменных, значениями которых являются числа.

// Создаём три переменных

var apple = 20 , orange = 30 , total_fruits;

// В переменную total_fruits заносим сумму двух переменных

total_fruits = apple + orange

document .write (total_fruits );

// Снова создаём три переменных

var apple = 20 , price = 17 , total_Sum;

// В переменную total_Sum заносим произведение двух переменных

total_Sum = apple * price

document .write (total_Sum );

Как видите в выполнении операций сложения и умножения над переменными, которые имею числовые значения, ничего сложного нет. С вычитанием и делением дело обстоит точно так же.

Обращаю Ваше внимание на то, что сейчас мы работали с числовыми значениями переменных.

Как Вы знаете из предыдущих примеров , в качестве значения переменной может выступать не только число, но и строка, то есть текст или фрагмент кода и т.п...

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

Обратимся к примеру...

// Создаём четыре переменных

var name = " Иван", family = " Иванов", otch = " Ильич", FIO;

// В переменную FIO заносим сумму трёх переменных, как бы соединяем их значения.

// И добавляем тег

Который обозначит новый абзац

FIO = family + name + otch + "

document .write (FIO );

// Создаём три переменных.

var name = "Пётр", family = "Петров", otch = "Кузьмич";

// В переменную FIO также заносим сумму трёх переменных. И добавляем пробелы между переменными

var FIO = family + " " + name + " " + otch ;

document .write (FIO );

Иван Иванов Ильич

Петров Пётр Кузьмич

В приведённом примере мы соединили строковые значения трёх переменных при помощи операции сложения.

Чтобы фамилия, имя и отчество не получились слитыми: ИвановИванИльич , в первом случае пробелы были проставлены изначально - в значении каждой переменной, а во втором варианте пробелы были добавлены в итоговую переменную FIO при помощи всё той же операции сложения.

Фрагменты кода добавляются аналогично, что мы и сделали в первом случае: добавили тег "

" для того чтобы следующий вывод переменной FIO начинался с нового абзаца.

Теперь попробуем соединить переменную, содержащую число с переменной содержащей текст.

var myStreet = "Димитрова " , myHouse = 121 ;

Листинг 1.9 представляет html-код, в котором заданы два числа (1 и 2), знак операции (+), форма с кнопкой «Посчитать» и текстовым полем для отображения введённых значений. Необходимо реализовать операции сложения соответствующих значений (Листинг 1.10).

Листинг 1.9. Файл 1.html

  • Случайная фраза
  • Сложение чисел


  • 1
  • 2
  • +
  • Посчитать
  • Форма представляет собой одно текстовое поле для вывода значений. Для организации символов «1», «2, «+» , использовались теги (можно было использовать другие теги, например или кнопки), а кнопка - для вывода окончательного результата. В контейнерах задано событие onClick , которое вызывает функцию addition(…) , передавая в JS-скрипт в качестве параметра соответствующее значение (1, 2, +). Кнопка с id="ok" вызывает функцию press_button() , которая не имеет параметров. В этой функции происходит подсчёт и вывод результата обратно в окно.

    Листинг 1.10. Файл my_script.js

  • function addition(value) {
  • document.getElementById("answer").value += value;
  • function press_button() {
  • var answer = 0;
  • var equation = document.getElementById("answer").value;
  • numbers = equation.split("+");
  • for (i in numbers)
  • if (numbers[i] != "") answer += parseInt(numbers[i]);
  • Первая функция в Листинге 1.10 вносит в текстовое поле формы значение «1», «2» или «+», в соответствии с тем, какой тег был нажат.

    Вторая функция, считывает из текстового поля с id="answer" значение атрибута value и присваивает это значение переменной equation . Это строка, которая содержит в себе n символов. Например, возможна запись ""1+2+1"" или ""1212+1121+1++2"".

    Поскольку мы заранее знаем, что используется операция сложения, знак «+» используется как разделитель строки на массив чисел. Для этого используется функция .split("+") . Переменная numbers содержит в себе эти значения.

    Теперь необходимо пробежаться по массиву и сложить все элементы. Для этого используется цикл for (i in numbers){…} . Однако здесь есть два важных момента, которые необходимо учесть при сложении.

    Во-первых, массив numbers содержит строковые значение. Если использовать операцию «+» для строковых значений произойдёт слияние элементов в одну строку. Мы же хотим получить ответ сложения чисел. Поэтому необходимо преобразовать строковые значения в числовые. Для этого используется функция parseInt (numbers[i]) . В неё передаётся элемент массива с номером = i.

    Во-вторых, пользователь может изначально задать неправильную строку. Например, ""1212+1121+1++2"". В этом случае при использовании функции.split("+") будут получены не только числа, но и пустые значения. Пустые значения нужно отбросить. Для этого используется условие if (numbers[i] != "") .

    Наконец, для подсчёта результатов была введена переменная var answer , изначально равная 0. К ней в цикле прибавляются значения на каждом шаге итерации. Затем, это значение возвращается обратно в текстовое поле document.getElementById("answer").value = answer.

    Функции function addition(value) и press_button() хороши тем, что они подходят для сложения любых целых чисел. Можно задать все числа диапазона в тегах и обработать событие onClick() . Или позволить ввод в текстовое поле с id="answer" и запретить ввод букв.

    Функция press_button() (в таком виде, как она написана сейчас) не подходит для обработки всех операций с числами. Поскольку функция split расщепляет строку только по одному значению.

    Чтобы реализовать обработку других арифметических операций, можно, например, складывать два первых вводимых числа, анализируя знак между ними. Т.е. не дожидаясь нажатия кнопки «Посчитать», обрабатывать вводимые значения и выводить промежуточный результат (Листинг 1.11, 1.12).

    Листинг 1.11. Файл 1.html

  • Случайная фраза
  • Сложение чисел


  • 1
  • 2
  • +
  • Посчитать
  • Обратите внимание, что в данном случае (Листинг 1.11) все значения передаются в функцию press_button() .

    Листинг 1.12. Файл my_script.js

  • var number = "";
  • var answer = 0;
  • function press_button(value) {
  • if (value == "1" || value == "2")
  • number += value;
  • document.getElementById("answer").value = number;
  • else if (value == "+")
  • if (number != "")
  • answer += parseInt(number);
  • number = "";
  • document.getElementById("answer").value = answer;
  • else if (value =="ok")
  • if (number =="") answer = document.getElementById("answer").value;
  • else answer += parseInt(number);
  • document.getElementById("answer").value = answer;
  • answer = 0;
  • number = "";
  • В функции press_button(value) происходит анализ переданного значения. Если это значение число (1 или 2), тогда последовательность вводится в текстовое поле.

    Если переданное значение – знак «+», введённое до этого число прибавляется к ответу (answer += parseInt(number); ), введённая строка обнуляется: number = "";, ответ выводится в текстовое поле. Эти действия происходят только в том случае, если number != "", т.е. если перед вводом знака «+» было введено некоторое число.

    Если переданное значение – слово «ok», снова происходит сравнение «было ли перед этим введено число». Если нет, тогда значение текстового поля не изменяется. Если число было введено, тогда происходит суммирование и вывод результата. Поскольку нажатие на кнопку не предполагает дальнейшего суммирование, ответ вновь принимает значение 0.

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

    Давайте приступим!

    Разберемся с терминами

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

    Итак, стоит знать, что обозначают такие термины, как операнд, унарный и бинарный оператор.

    Операндом называется тот элемент, к которому применяются некоторые операторы. Так, например, в записи «15 — 38» оператором выступает знак «минус», а операндами являются числа 15 и 38.

    А что же такое унарный или бинарный оператор? Тут также все просто. Унарный (от слова «уно», что означает «один») применяется только к одному элементу. К примеру, -7. В этом случае «минус» — это унарный оператор. А бинарный (уже понятно, что означает «два») работает с двумя объектами. Здесь можно в качестве примера привести «12*701».

    «У меня есть приоритеты! Поэтому плевал я на ваш порядок!»

    Уверен, что всем известно о приоритетах выполнения арифметических операций. Однако с изучением языков программирования и конкретно в этот перечень добавляются и другие их виды. Всего существует 20 уровней, начиная с 0 и заканчивая 19.

    В таблице, прикрепленной ниже, я перечислил несколько операторов в порядке их важности.

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

    Инкремент и декремент

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

    Существует два вида как инкремента, так и декремента: постфиксный и префиксный. При чем первый тип имеет приоритет 16, а второй – 15.

    Разница их состоит в том, в какой момент идет изменение числа. Так, префиксные типы увеличивают или уменьшают значение сразу. Поэтому если в строке будет указано:

    то при запуске программы отобразится 2. В то время как при использовании постфиксных операторов после запуска кода

    выведется 1.

    Рассмотрим пример, который достаточно часто дают в тестах или на собеседованиях. Вам нужно сказать, что отобразится на экране при первом и втором выводах.

    1 2 "use strict"; 3 var i = 3; 4 i--; // короткая и удобная запись для i = i - 1. 5 alert(++i + i++); // i=? 6 alert(i);// i=? 7

    А теперь давайте разберем. В четвертой строке указано уменьшение i на единицу. Изменения вступят в силу при выполнении следующей строки программы. Поэтому во время вызова alert переменная i будет равна 2.

    Префиксный инкремент сразу увеличивает значение на 1, а постфиксный вступает в силу на следующей строке. В итоге получим запись «3+3», а значит и в диалоговом окне выведется 6.

    На следующей строке увеличение сработало и поэтому отобразится 4.

    Что-то новенькое при сложении элементов

    В JS складывать можно не только числа, а еще и другие типы переменных: строки, и т.д. В качестве примера ознакомьтесь с частью программы.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    function myFunction() { var a=3, b=7; var str1="Hi, ", str2="friend!"; var c = a+b; var str = str1+str2; var mix = str1+a; alert(c+"\n"+str+"\n"+mix); //выведет: 10 // Hi, friend! // Hi, 3 }

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

    Допустим вы вытащили определенное значение, которое является строковым var str1="10"; и при этом вам его надо суммировать с числом var a=3; . Если будет произведена операция var mix = str1+ a; , то при выводе alert (mix); на экране появится «103». Чтобы этого не было, текстовую переменную нужно конвертировать следующим образом:

    var mix = parseInt (str1, 10)+a;. //ответ: 13

    Перейдем к массивам. В скриптовом языке существует функция, которая объединяет несколько массивов в один. Это concat.

    var numbers1 = ; var numbers2 = ; // получается массив ; var nums = numbers1.concat(numbers2); alert(nums);

    Если же необходимо просуммировать все элементы массива, то здесь вас спасут только циклы.

    1 2 3 4 var res=0; for (var i=0; i