Какой оператор из этих выполняет не только математические операции
Перейти к содержимому

Какой оператор из этих выполняет не только математические операции

  • автор:

Какие из этих операторов выполняет не только арифметические операции?

Cо 2 и 3 вариантом понятно. Оператор «-» выполняет приведение типов string в number, что не является арифметической операцией. Оператор «+» выполняет арифметическую операцию сложения и выполняет конкатенацию строк. А остальные?

Отслеживать

задан 1 дек 2019 в 20:27

195 1 1 золотой знак 3 3 серебряных знака 19 19 бронзовых знаков

и где интересно сказано, что — выполняет такое приведение? прям вот такими словами, и почему тогда + не делает того же?

Базовые операторы, математика

Многие операторы знакомы нам ещё со школы: сложение + , умножение * , вычитание — и так далее.

В этой главе мы начнём с простых операторов, а потом сконцентрируемся на специфических для JavaScript аспектах, которые не проходят в школьном курсе арифметики.

Термины: «унарный», «бинарный», «операнд»

Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.

  • Операнд – то, к чему применяется оператор. Например, в умножении 5 * 2 есть два операнда: левый операнд равен 5 , а правый операнд равен 2 . Иногда их называют «аргументами» вместо «операндов».
  • Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус «-» меняет знак числа на противоположный:

let x = 1; x = -x; alert( x ); // -1, применили унарный минус
let x = 1, y = 3; alert( y - x ); // 2, бинарный минус вычитает значения

Математика

Поддерживаются следующие математические операторы:

  • Сложение + ,
  • Вычитание — ,
  • Умножение * ,
  • Деление / ,
  • Взятие остатка от деления % ,
  • Возведение в степень ** .

Первые четыре оператора очевидны, а про % и ** стоит сказать несколько слов.

Взятие остатка %

Оператор взятия остатка % , несмотря на обозначение, никакого отношения к процентам не имеет.

Результат a % b – это остаток от целочисленного деления a на b .

alert( 5 % 2 ); // 1, остаток от деления 5 на 2 alert( 8 % 3 ); // 2, остаток от деления 8 на 3 alert( 8 % 4 ); // 0, остаток от деления 8 на 4

Возведение в степень **

Оператор возведения в степень a ** b возводит a в степень b .

В школьной математике мы записываем это как a b .

alert( 2 ** 2 ); // 2² = 4 alert( 2 ** 3 ); // 2³ = 8 alert( 2 ** 4 ); // 2⁴ = 16

Математически, оператор работает и для нецелых чисел. Например, квадратный корень является возведением в степень ½:

alert( 4 ** (1/2) ); // 2 (степень 1/2 эквивалентна взятию квадратного корня)

Сложение строк при помощи бинарного +

Давайте рассмотрим специальные возможности операторов JavaScript, которые выходят за рамки школьной арифметики.

Обычно при помощи плюса ‘+’ складывают числа.

Но если бинарный оператор ‘+’ применить к строкам, то он их объединяет в одну:

let s = "моя" + "строка"; alert(s); // моястрока

Обратите внимание, если хотя бы один операнд является строкой, то второй будет также преобразован в строку.

alert( '1' + 2 ); // "12" alert( 2 + '1' ); // "21"

Как видите, не важно, первый или второй операнд является строкой.

Вот пример посложнее:

alert(2 + 2 + '1' ); // будет "41", а не "221"

Здесь операторы работают один за другим. Первый + складывает два числа и возвращает 4 , затем следующий + объединяет результат со строкой, производя действие 4 + ‘1’ = ’41’ .

Сложение и преобразование строк — это особенность бинарного плюса + . Другие арифметические операторы работают только с числами и всегда преобразуют операнды в числа.

Например, вычитание и деление:

alert( 6 - '2' ); // 4, '2' приводится к числу alert( '6' / '2' ); // 3, оба операнда приводятся к числам

Приведение к числу, унарный +

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

Унарный, то есть применённый к одному значению, плюс + ничего не делает с числами. Но если операнд не число, унарный плюс преобразует его в число.

// Не влияет на числа let x = 1; alert( +x ); // 1 let y = -2; alert( +y ); // -2 // Преобразует не числа в числа alert( +true ); // 1 alert( +"" ); // 0

На самом деле это то же самое, что и Number(. ) , только короче.

Необходимость преобразовывать строки в числа возникает очень часто. Например, обычно значения полей HTML-формы — это строки. А что, если их нужно, к примеру, сложить?

Бинарный плюс сложит их как строки:

let apples = "2"; let oranges = "3"; alert( apples + oranges ); // "23", так как бинарный плюс объединяет строки

Поэтому используем унарный плюс, чтобы преобразовать к числу:

let apples = "2"; let oranges = "3"; // оба операнда предварительно преобразованы в числа alert( +apples + +oranges ); // 5 // более длинный вариант // alert( Number(apples) + Number(oranges) ); // 5

С точки зрения математика, такое изобилие плюсов выглядит странным. Но с точки зрения программиста тут нет ничего особенного: сначала выполнятся унарные плюсы, которые приведут строки к числам, а затем бинарный ‘+’ их сложит.

Почему унарные плюсы выполнились до бинарного сложения? Как мы сейчас увидим, дело в их приоритете.

Приоритет операторов

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

Из школы мы знаем, что умножение в выражении 1 + 2 * 2 выполнится раньше сложения. Это как раз и есть «приоритет». Говорят, что умножение имеет более высокий приоритет, чем сложение.

Скобки важнее, чем приоритет, так что, если мы не удовлетворены порядком по умолчанию, мы можем использовать их, чтобы изменить приоритет. Например, написать (1 + 2) * 2 .

В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше, – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.

Отрывок из таблицы приоритетов (нет необходимости всё запоминать, обратите внимание, что приоритет унарных операторов выше, чем соответствующих бинарных):

Приоритет Название Обозначение
15 унарный плюс +
15 унарный минус
14 возведение в степень **
13 умножение *
13 деление /
12 сложение +
12 вычитание
2 присваивание =

Так как «унарный плюс» имеет приоритет 15 , который выше, чем 12 у «сложения» (бинарный плюс), то в выражении «+apples + +oranges» сначала выполнятся унарные плюсы, а затем сложение.

Присваивание

Давайте отметим, что в таблице приоритетов также есть оператор присваивания = . У него один из самых низких приоритетов: 2 .

Именно поэтому, когда переменной что-либо присваивают, например, x = 2 * 2 + 1 , то сначала выполнится арифметика, а уже затем произойдёт присваивание = с сохранением результата в x .

let x = 2 * 2 + 1; alert( x ); // 5

Присваивание = возвращает значение

Тот факт, что = является оператором, а не «магической» конструкцией языка, имеет интересные последствия.

Большинство операторов в JavaScript возвращают значение. Для некоторых это очевидно, например сложение + или умножение * . Но и оператор присваивания не является исключением.

Вызов x = value записывает value в x и возвращает его.

Благодаря этому присваивание можно использовать как часть более сложного выражения:

let a = 1; let b = 2; let c = 3 - (a = b + 1); alert( a ); // 3 alert( c ); // 0

В примере выше результатом (a = b + 1) будет значение, которое присваивается переменной a (то есть 3 ). Потом оно используется для дальнейших вычислений.

Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в JavaScript-библиотеках.

Однако писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.

Присваивание по цепочке

Рассмотрим ещё одну интересную возможность: цепочку присваиваний.

let a, b, c; a = b = c = 2 + 2; alert( a ); // 4 alert( b ); // 4 alert( c ); // 4

Такое присваивание работает справа налево. Сначала вычисляется самое правое выражение 2 + 2 , и затем результат присваивается переменным слева: c , b и a . В конце у всех переменных будет одно значение.

Опять-таки, чтобы код читался легче, лучше разделять подобные конструкции на несколько строчек:

c = 2 + 2; b = c; a = c;

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

Сокращённая арифметика с присваиванием

Часто нужно применить оператор к переменной и сохранить результат в ней же.

let n = 2; n = n + 5; n = n * 2;

Эту запись можно укоротить при помощи совмещённых операторов += и *= :

let n = 2; n += 5; // теперь n = 7 (работает как n = n + 5) n *= 2; // теперь n = 14 (работает как n = n * 2) alert( n ); // 14

Подобные краткие формы записи существуют для всех арифметических и побитовых операторов: /= , -= , **= и так далее.

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

let n = 2; n *= 3 + 5; alert( n ); // 16 (сначала выполнится правая часть, выражение идентично n *= 8)

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

Одной из наиболее частых числовых операций является увеличение или уменьшение на единицу.

Для этого существуют даже специальные операторы:

    Инкремент ++ увеличивает переменную на 1:

let counter = 2; counter++; // работает как counter = counter + 1, просто запись короче alert( counter ); // 3
let counter = 2; counter--; // работает как counter = counter - 1, просто запись короче alert( counter ); // 1

Инкремент/декремент можно применить только к переменной. Попытка использовать его на значении, типа 5++, приведёт к ошибке.

Операторы ++ и — могут быть расположены не только после, но и до переменной.

  • Когда оператор идёт после переменной — это «постфиксная форма»: counter++ .
  • «Префиксная форма» — это когда оператор идёт перед переменной: ++counter .

Обе эти инструкции делают одно и то же: увеличивают counter на 1 .

Есть ли разница между ними? Да, но увидеть её мы сможем, только если будем использовать значение, которое возвращают ++/— .

Давайте проясним этот момент. Как мы знаем, все операторы возвращают значение. Операторы инкремента/декремента не исключение. Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения/уменьшения числа).

Чтобы увидеть разницу, вот небольшой пример:

let counter = 1; let a = ++counter; // (*) alert(a); // 2

В строке (*) префиксная форма ++counter увеличивает counter и возвращает новое значение 2 . Так что alert покажет 2 .

Теперь посмотрим на постфиксную форму:

let counter = 1; let a = counter++; // (*) меняем ++counter на counter++ alert(a); // 1

В строке (*) постфиксная форма counter++ также увеличивает counter , но возвращает старое значение (которое было до увеличения). Так что alert покажет 1 .

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

let counter = 0; counter++; ++counter; alert( counter ); // 2, обе строки сделали одно и то же

Проверьте правильность

Антон П.

Здравствуйте все. Я участвую в школьной олимпиаде, JavaScript стал изучать недавно. Я ответил на все вопросы конкурса, но только сомневаюсь в правильности некоторых своих ответов, в связи с чем вопрос: кто из Вас точно знает ответ, подскажите, пожалуйста. Ниже я привожу сам тест, то, что я подчеркнул, я посчитал правильным ответом на вышепоставленный вопрос.
«Язык JavaScript»

Раздел 2 «Язык JavaScript»
1. Можно ли через javascript подключить
внешний js-файл, отсутствующий на
странице?

а) да, но только один раз;
б) да, но только до загрузки страницы;
в) да, сколько угодно файлов когда угодно.

2. В каком случае из перечисленных
событие не попадет на обработку javascript

а) если в момент его наступления обрабатывается другое событие;
б) если страничка просматривается локально, т.е. offline;
в) только если javascript отключен.

3. Какой оператор из этих выполняет не
только математические операции?

а) *
б) /
в) +
г) —
д) >>>

4. Какие варианты правильно объявляют
переменную f для функции,
возвращающей сумму двух аргументов?

а) var f = function(a,b)
б) var f = new Function(‘a,b’, ‘return a+b&#039
в) var f = new Function(‘a’, ‘b’, ‘return a+b&#039
г) никакие

5. Какие конструкции для циклов есть в
javascript?

а) только две: for и while;
б) только одна: for;
в) три: for, while и do. while.

6. Какие из этих вариантов задают массив
из элементов «a», «b»?

а) var a = new Array(«a»,»b&quot
б) var a = < "a", "b" >
в) var a = ( «a», «b» )
г) var a =
д) var a = «a,b».split(‘,&#039

Математические операции в JS

JavaScript - #6 ТИПЫ ДАННЫХ введение / Основы по JavaScript

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

Javascript математические операции

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

Основные математические операции

Начнем мы с математических операций , таких как сложение, умножение, деление, вычитание. В JavaScript они обозначаются следующими символами (+ — / *) .

К примеру, при помощи метода console.log() мы можем вывести в браузера результат математической операции.

console.log(10+5);

Благодаря переменным, которые выступают в качестве хранилища для какого-то значения, все это можно представить в таком виде.

Первыми двумя строками кода создаем две переменные (a и i), в каждой из которых мы сохраняем числовое значение. Третьей строкой создаем переменную и сохраняем в ней результат перемножения данных значений.

Результат отображаем в консоли.

var a = 23, i = 4, x = a * i; console.log(x);

Периодически поступали вопросы, как узнать, где можно использовать пробел, а где нельзя, ведь JS очень чувствителен к опечаткам

Да соглашусь, он чувствителен к опечаткам но язык JavaScript не учитывает за ошибку «пробелы», «табуляцию» и «возврат каретки». Интерпретатор JS игнорирует лишние пробелы, поэтому вы можете их свободно использовать для форматирования кода.

К примеру, данный код тоже будет работать, но читать его будет неудобно.

console.log(a + i);

Главное правило, добавляйте пробелы в том случае, если они упрощают чтение кода. К примеру, следующий код пишется в таком виде в одну строчку.

var a = 23, i = 4, x = a * i;

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

var a = 23, i = 4, x = a * i; console.log(x);

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

Но существует важное исключение из правил, приведенных выше.

Нельзя возвращать каретку внутри строки. Другими словами, строку нельзя разбивать на две строки кода, пример:

var a = 23, i = 4, x = a * i; name = 'Горелов Денис'; console.log(x);

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

Порядок операций

В javaScript порядок математических операций происходит как в математике, операции умножения (*) и деления (/) имеют приоритет над действиями сложения (+) и вычитания (-) . По этому из за невнимательности можете получить типичную ошибку.

console.log(5 + 5 * 10);

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

console.log((5 + 5) * 10);

Объединение строк

Объединение нескольких строк в одну – это обычная задача при программировании. Примеры таких объединений можете встретить при заполнение форм, очень часто мы добавляем имя пользователя в обращении или какие ни будь другие данные.

Применение математических операций в js

Объединение строк производится при помощи операции (+) и называется «конкатенацией». Как вы заметили, эта та самая операция которую мы используем для сложение числовых значений, однако со строками дело обстоит несколько иначе.

К примеру, создадим три переменные, в одной положим Имя, в другой Фамилию, и в третьей объединим их, и результат выводим в консоли.

var firstName = 'Денис', lastName = 'Горелов', fullName = firstName + lastName; console.log(fullName);

Как видим обе переменные буквально соединились, между именем и фамилией нет пробела, поскольку при объединение строк происходит просто «склеивание» их друг с другом.

javaScript соединение строк

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

fullName = firstName + ' ' +lastName;

Главное не забывайте, что переменная – это просто контейнер, содержащий в себе любой тип данных. Поэтому объединение двух переменных, содержащих строки (firstName + LastName), это одно и тоже если бы мы написали таким образом ‘Денис’+’Горелов’.

Объединение чисел и строк

В большей степени все математические операции применяются к числам и нет смысла, к примеру умножать два «яблока» между собой. Если мы это сделаем, то получим особое значение языка JavaScript – NaN , которое означает «не число».

javascript свойство NaN

Для примера если мы объединим наши строки, получим данный результат.

fullName = firstName * lastName;

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

Для примера создадим две переменные, в одной поместим число в другую строку. Где номер паспорта — это число, а название это – строка.

В данном случае, используя операцию (+) , вы совершаете два действия: преобразовываем, число в строку и соединяете его с другой строкой.

var numPassport = '566427', message = 'Паспорт №'; alert(message + numPassport);

JavaScript понимает, что здесь присутствует строка, и результат он преобразует в строку. По этому не следует совершать математических операций так как он воспринимает знак (+) как операцию объединения строк, и преобразует число в строку.

js - соединение строк

В данном примере все понятно, но может быть и другая ситуация…

К примеру у нас интернет магазин и нужно показать общее количество покупок. Если у пользователя спрашивают ответ на вопрос через форму на сайте, то вводимое им число будет строкой и можно получить такой результат.

var numShoes = '3', // Количество пар обуви numSocks = 10; // количество носков alert(numShoes + numSocks);

Скорей всего вы ожидали увидеть другое число. Однако, если значение одной из переменных является строкой, интерпретатор JS преобразует такое выражение в строку, и в итоге получите склеивание чисел, а не их сумму.

Соединение строк и чисел в JavaScript

Есть несколько способов для предотвращения подобной ситуации.

Первый из них, мы можем просто добавить знак (+) в начале строки содержащей число:

console.log(+numShoes + numSocks);

Данный знак + добавляется к самой строке без всяких пробелов, тем самым интерпретатор преобразует такую строку в числовое значение.

Приводи строку к числу в JS

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

console.log(Number(numShoes) + numSocks);

Сама команда Number() преобразует строку в число, но если в место числа в нее поместить буквы получим значение NaN , которое говорит о том что преобразовать буквы в числа не возможно.

Функция prompt()

В большинстве случаев вы будете преобразовывать числа в строки при помощи пользовательского ввода, к примеру познакомимся еще с одной функцией prompt () , которая предназначена для вывода на экран пользователя диалогового окна с сообщением, текстовым полем для ввода данных и кнопкой «Ок».

Функция prompt()

С помощью ее отобразим сообщение пользователю, а результат выведем в консоли.

var numShoes = prompt('Сколько пар обуви вы хотите?'), // Количество пар обуви numSocks = 10; // количество носков console.log(numShoes + numSocks);

Получили строковое значение, что бы это исправить заключаем переменную в функцию Number() и тогда сможем вывести общее количество.

Подобная проблема появляется, когда пытаемся объединять число со строками при помощи знака (+) , так как другие операции если используем то все нормально работает.

Операции в JavaScript

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

var numShoes = prompt('Сколько пар обуви вы хотите?'), // Количество пар обуви numSocks = 10; // количество носков console.log(Number(numShoes) + numSocks);

Практическая задача

Создайте три переменные:

  • в одну положите числовое значение (текущий год),
  • во второй переменной сохраните данные результат функции prompt() при помощи которой вы спрашиваете пользователя «Как Вас зовут?»,
  • в третьей переменной сохраните результат арифметических действия, вычислите «год рождения» а результат запишите в переменную.

При помощи функции alert() отобразите результат в таком виде, где имя и год подставляется из переменных.

«Максим, Ваш год рождения 1989.»

Задание по JavaScript

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

С вами был Горелов Денис, скоро увидимся.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *