Оператор / делит первый операнд на второй. Если вам приходилось работать с языками программирования, в которых целые и вещественные числа относятся к разным типам, вы могли бы ожидать получить целый результат от деления одного целого числа на другое целое число. Однако в языке JavaScript все числа являются вещественными, поэтому все операции деления возвращают вещественный результат: выражение 5/2 вернет 2.5, а не 2. Деление на ноль возвращает положительную или отрицательную бесконечность, тогда как выражение 0/0 возвращает NaN; ни в одном из этих случаев не возбуждается исключение.
Оператор % производит деление по модулю первого операнда на второй. Иными словами, он возвращает остаток от целочисленного деления первого операнда на второй. Знак результата определяется знаком первого операнда. Например, выражение 5 % 2 вернет 1, а выражение -5 % 2 вернет -1.
Несмотря на то что оператор по модулю обычно применяется к целым числам, он также может оперировать вещественными значениями. Например, выражение 6.5 % 2.1 вернет 0,2.
Двухместный оператор + складывает числовые операнды или выполняет конкатенацию строковых операндов:
1 + 2 // => З
"hello" + " " + "there" // => "hello there"
"1" + "2" // => "12"
Когда значениями обоих операндов являются числа или строки, результат действия оператора + очевиден. Однако в других случаях возникает необходимость преобразования типов, а выполняемая операция зависит от результатов преобразований. В соответствии с правилами преобразований оператор + отдает предпочтение операции конкатенации строк: если один из операндов является строкой или объектом, который может быть преобразован в строку, другой операнд также преобразуется в строку, после чего выполняется операция конкатенации строк. Операция сложения выполняется, только если ни один из операндов не является строкой.
Формально оператор + использует следующий алгоритм работы:
• Если значением любого из операндов является объект, он преобразуется в простое значение с использованием алгоритма преобразования объекта в простое значение, описанного в разделе 3.8.3: объекты Date преобразуются с помощью их метода toString(), а все остальные объекты преобразуются с помощью метода valueOf(), если он возвращает простое значение. Однако большинство объектов не имеют метода valueOf(), поэтому они также преобразуются с помощью метода toString().
• Если после преобразования объекта в простое значение любой из операндов оказывается строкой, другой операнд также преобразуется в строку и выполняется операция конкатенации.
• В противном случае оба операнда преобразуются в числа (или в NaN) и выполняется операция сложения.
Например:
1 + 2
// => 3: сложение
"1" + "2" // => "12": конкатенация
"1" + 2 // => "12": конкатенация после преобразования числа в строку
1 + {} // => ”1[object Object]": конкатенация после
// преобразования объекта в строку
true + true // => 2: сложение после преобразования логического значения в число
2 + null // => 2: сложение после преобразования null в 0
2 + undefined // => NaN: сложение после преобразования undefined в NaN
Наконец, важно отметить, что, когда оператор + применяется к строкам и числам, он может нарушать ассоциативность. То есть результат может зависеть от порядка, в каком выполняются операции. Например:
1 + 2 + "blind mice": // => "3 blind mice"
1 + (2 + "blind mice"); // => ”12 blind mice"
В первом выражении отсутствуют скобки и оператор + имеет ассоциативность слева направо, благодаря чему сначала выполняется сложение двух чисел, а их сумма объединяется со строкой. Во втором выражении порядок выполнения операций изменен с помощью скобок: число 2 объединяется со строкой, давая в результате новую строку. А затем число 1 объединяется с новой строкой, что дает окончательный результат.
4.8.2. Унарные арифметические операторы
Унарные операторы изменяют значение единственного операнда и создают новое значение. Все унарные операторы в JavaScript имеют наивысший приоритет, и все они являются правоассоциативными. Все унарные арифметические операторы, описываемые в этом разделе (+, -, ++ и --
), при необходимости преобразуют свой единственный операнд в число. Обратите внимание, что знаки пунктуации + и - используются как унарные и как двухместные операторы.
Читать дальше
Конец ознакомительного отрывка
Купить книгу