Ðногие опеÑаÑоÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñ Ð½Ð°Ð¼ еÑÑ Ñо ÑколÑ: Ñложение +, Ñмножение *, вÑÑиÑание - и Ñак далее.
Ð ÑÑой главе Ð¼Ñ Ð½Ð°ÑнÑм Ñ Ð¿ÑоÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов, а поÑом ÑконÑенÑÑиÑÑемÑÑ Ð½Ð° ÑпеÑиÑиÑеÑÐºÐ¸Ñ Ð´Ð»Ñ 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.
Ð ÑколÑной маÑемаÑике Ð¼Ñ Ð·Ð°Ð¿Ð¸ÑÑваем ÑÑо как ab.
ÐапÑимеÑ:
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 -
ÐекÑеменÑ
--ÑменÑÑÐ°ÐµÑ Ð¿ÐµÑеменнÑÑ Ð½Ð° 1: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, обе ÑÑÑоки Ñделали одно и Ñо же -
ÐÑли Ñ Ð¾ÑеÑÑÑ ÑÑÑ Ð¶Ðµ иÑполÑзоваÑÑ ÑезÑлÑÑаÑ, Ñо нÑжна пÑеÑикÑÐ½Ð°Ñ ÑоÑма:
let counter = 0; alert( ++counter ); // 1 -
ÐÑли нÑжно ÑвелиÑиÑÑ Ð¸ пÑи ÑÑом полÑÑиÑÑ Ð·Ð½Ð°Ñение пеÑеменной до ÑвелиÑÐµÐ½Ð¸Ñ â нÑжна поÑÑÑикÑÐ½Ð°Ñ ÑоÑма:
let counter = 0; alert( counter++ ); // 0
ÐпеÑаÑоÑÑ ++/-- могÑÑ Ñакже иÑполÑзоваÑÑÑÑ Ð²Ð½ÑÑÑи вÑÑажений. ÐÑ
пÑиоÑиÑÐµÑ Ð²ÑÑе, Ñем Ñ Ð±Ð¾Ð»ÑÑинÑÑва дÑÑгиÑ
аÑиÑмеÑиÑеÑкиÑ
опеÑаÑий.
ÐапÑимеÑ:
let counter = 1;
alert( 2 * ++counter ); // 4
СÑавниÑе Ñ:
let counter = 1;
alert( 2 * counter++ ); // 2, поÑÐ¾Ð¼Ñ ÑÑо counter++ возвÑаÑÐ°ÐµÑ "ÑÑаÑое" знаÑение
ХоÑÑ ÑÐµÑ Ð½Ð¸ÑеÑки здеÑÑ Ð²ÑÑ Ð² поÑÑдке, ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¾Ð±ÑÑно Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð´ менее ÑиÑабелÑнÑм. Ðдна ÑÑÑока вÑполнÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво дейÑÑвий â Ð½ÐµÑ Ð¾ÑоÑо.
ÐÑи беглом ÑÑении кода можно Ñ Ð»ÑгкоÑÑÑÑ Ð¿ÑопÑÑÑиÑÑ Ñакой counter++, и бÑÐ´ÐµÑ Ð½ÐµÐ¾Ñевидно, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑвелиÑиваеÑÑÑ.
ÐÑÑÑе иÑполÑзоваÑÑ ÑÑÐ¸Ð»Ñ Â«Ð¾Ð´Ð½Ð° ÑÑÑока â одно дейÑÑвие»:
let counter = 1;
alert( 2 * counter );
counter++;
ÐобиÑовÑе опеÑаÑоÑÑ
ÐобиÑовÑе опеÑаÑоÑÑ ÑабоÑаÑÑ Ñ 32-ÑазÑÑднÑми ÑелÑми ÑиÑлами (пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи пÑиводÑÑ Ðº ним), на ÑÑовне Ð¸Ñ Ð²Ð½ÑÑÑеннего двоиÑного пÑедÑÑавлениÑ.
ÐÑи опеÑаÑоÑÑ Ð½Ðµ ÑвлÑÑÑÑÑ Ñем-Ñо ÑпеÑиÑиÑнÑм Ð´Ð»Ñ JavaScript, они поддеÑживаÑÑÑÑ Ð² болÑÑинÑÑве ÑзÑков пÑогÑаммиÑованиÑ.
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие побиÑовÑе опеÑаÑоÑÑ:
- AND(и) (
&) - OR(или) (
|) - XOR(побиÑовое иÑклÑÑаÑÑее или) (
^) - NOT(не) (
~) - LEFT SHIFT(левÑй Ñдвиг) (
<<) - RIGHT SHIFT(пÑавÑй Ñдвиг) (
>>) - ZERO-FILL RIGHT SHIFT(пÑавÑй Ñдвиг Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ нÑлÑми) (
>>>)
Ðни иÑполÑзÑÑÑÑÑ Ñедко, когда Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑиÑоваÑÑ Ñ ÑиÑлами на оÑÐµÐ½Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¼ (побиÑовом) ÑÑовне. РближайÑем вÑемени они нам не понадобÑÑÑÑ, Ñак как веб-ÑазÑабоÑÑики Ñедко к ним пÑибегаÑÑ, Ñ Ð¾ÑÑ Ð² некоÑоÑÑÑ ÑÑеÑÐ°Ñ (напÑимеÑ, в кÑипÑогÑаÑии) они полезнÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ Ð¾ Ð½Ð¸Ñ Ð² главе ÐобиÑовÑе опеÑаÑоÑÑ, когда Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ ÑеалÑÐ½Ð°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ.
ÐпеÑаÑÐ¾Ñ Â«Ð·Ð°Ð¿ÑÑаÑ»
ÐпеÑаÑÐ¾Ñ Â«Ð·Ð°Ð¿ÑÑаÑ» (,) Ñедко пÑименÑеÑÑÑ Ð¸ ÑвлÑеÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из ÑамÑÑ
необÑÑнÑÑ
. Ðногда он иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ коÑоÑкого кода, поÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ нÑжно знаÑÑ ÐµÐ³Ð¾, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ, ÑÑо пÑи ÑÑом пÑоиÑÑ
одиÑ.
ÐпеÑаÑÐ¾Ñ Â«Ð·Ð°Ð¿ÑÑаÑ» пÑедоÑÑавлÑÐµÑ Ð½Ð°Ð¼ возможноÑÑÑ Ð²ÑÑиÑлÑÑÑ Ð½ÐµÑколÑко вÑÑажений, ÑазделÑÑ Ð¸Ñ
запÑÑой ,. Ðаждое вÑÑажение вÑполнÑеÑÑÑ, но возвÑаÑаеÑÑÑ ÑезÑлÑÑÐ°Ñ ÑолÑко поÑледнего.
ÐапÑимеÑ:
let a = (1 + 2, 3 + 4);
alert( a ); // 7 (ÑезÑлÑÑÐ°Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ 3 + 4)
ÐеÑвое вÑÑажение 1 + 2 вÑполнÑеÑÑÑ, а ÑезÑлÑÑÐ°Ñ Ð¾ÑбÑаÑÑваеÑÑÑ. ÐаÑем идÑÑ 3 + 4, вÑÑажение вÑполнÑеÑÑÑ Ð¸ возвÑаÑаеÑÑÑ ÑезÑлÑÑаÑ.
ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо опеÑаÑÐ¾Ñ , Ð¸Ð¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¹ пÑиоÑиÑеÑ, ниже =, поÑÑÐ¾Ð¼Ñ Ñкобки Ð²Ð°Ð¶Ð½Ñ Ð² пÑиведÑнном вÑÑе пÑимеÑе.
ÐопÑобÑйÑе запÑÑÑиÑÑ ÑледÑÑÑий код (ÑÑÑогий Ñежим "use strict" в пÑимеÑе ниже не иÑполÑзÑеÑÑÑ, инаÑе Ð¼Ñ Ð±Ñ Ð¿Ð¾Ð»ÑÑили оÑибкÑ):
a = 1 + 2, 3 + 4;
alert(a); // 3
ÐеобÑÑнÑй ÑезÑлÑÑаÑ, пÑавда? ÐÑобенно ÑÑиÑÑÐ²Ð°Ñ Ñо, ÑÑо опеÑаÑÐ¾Ñ , должен «вÑполнÑÑÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ вÑÑажение, но возвÑаÑаÑÑ ÑезÑлÑÑÐ°Ñ ÑолÑко поÑледнего».
Ðез Ñкобок в a = 1 + 2, 3 + 4 ÑнаÑала вÑполниÑÑÑ +, ÑÑммиÑÑÑ ÑиÑла в a = 3, 7, заÑем опеÑаÑÐ¾Ñ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ = пÑиÑÐ²Ð¾Ð¸Ñ a = 3, а Ñо, ÑÑо идÑÑ Ð´Ð°Ð»ÑÑе, бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑовано. ÐÑÑ Ñак же, как в (a = 1 + 2), 3 + 4.
ÐаÑем нам опеÑаÑоÑ, коÑоÑÑй оÑбÑаÑÑÐ²Ð°ÐµÑ Ð²ÑÑ, кÑоме поÑледнего вÑÑажениÑ?
Ðногда его иÑполÑзÑÑÑ Ð² ÑоÑÑаве более ÑложнÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑий, ÑÑÐ¾Ð±Ñ ÑделаÑÑ Ð½ÐµÑколÑко дейÑÑвий в одной ÑÑÑоке.
ÐапÑимеÑ:
// ÑÑи опеÑаÑии в одной ÑÑÑоке
for (a = 1, b = 3, c = a * b; a < 10; a++) {
...
}
Такие ÑÑÑки иÑполÑзÑÑÑÑÑ Ð²Ð¾ Ð¼Ð½Ð¾Ð³Ð¸Ñ JavaScript-ÑÑеймвоÑÐºÐ°Ñ . ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð¼Ñ Ñпоминаем Ð¸Ñ . Ðо обÑÑно они не ÑлÑÑÑаÑÑ ÑиÑабелÑноÑÑÑ ÐºÐ¾Ð´Ð°, поÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ð¸Ñ Ñ Ð¾ÑоÑо подÑмаÑÑ, пÑежде Ñем Ð¸Ñ Ð¸ÑполÑзоваÑÑ.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)