1. 算術演算子
(1)算術演算子は,四則演算の足し算(+),引き算(−),掛け算(×),割り算(÷)を行うものですが,コンピュータ上では,これらは半角(1バイト)文字の + - * / で表されます.
【例1.1】
document.write(1+2); ⇒ 3 が表示される
【例1.2】
aa1 = 2+3; document.write(aa1); ⇒ 5 が表示される
【例2.1】
document.write(3-4); ⇒ -1 が表示される
【例2.2】
nn1 = 57-31; document.write(nn1); ⇒ 26 が表示される
【例3.1】
document.write(5*6); ⇒ 30 が表示される
【例3.2】
mm1 = 0.125 * 3; document.write(mm1); ⇒ 0.375 が表示される
【例4.1】
document.write(3/5); ⇒ 0.6 が表示される
【例4.2】
kk1 = 5 / 7; document.write(kk1); ⇒ 0.7142857142857143 が表示される(※割り切れないときは,小数第16けた付近で四捨五入された結果が表示される.) |
(2)足し算,引き算,掛け算,割り算が混じっている計算では,掛け算,割り算が先に行われる.掛け算と割り算,足し算と引き算は同順位です
【例5.1】
xx1 = 1 * 2 + 3 / 4 document.write(xx1); ⇒ 2.75 が表示される ※ 2 + 0.75 の計算になる
【例5.2】
(3)かっこ ( ) の中は先に計算されます.算数・数学では小かっこ( ),中かっこ { },大かっこ [ ]などと区別するが,javascriptでは ( ) だけを使い,何重に使ってもよい.xx1 = 3 / 4 / 5 document.write(xx1); ⇒ 0.15 が表示される ※ 3 / 4= 0.75 , 0.75 / 5 = 0.15 になる ( ) を何重にも使うときは,かっこの始まり ( とかっこの終り ) が対となって同じ数だけなければならない.
【例6.1】
pp1 = 3 / (4 * 5); document.write(pp1); ⇒ 0.15 が表示される ※かっこを使わずに,【例5.2】のように書くのと同じ
【例6.2】
pp1 = ((2+1)*2+1)*2+1; document.write(pp1); ⇒ 15 が表示される ※((3*2+1)*2+1)=7*2+1=15になる. |
(4)+演算子の危険な落とし穴 他の多くのプログラミング言語では,変数を使う前に一番最初に変数の型宣言を行います.これにより,その変数に割り当てられるメモリのサイズやその変数に格納されるデータの型が決まります.
C言語での例
これに対して,javascriptでは「変数の型宣言をしなくても」「他の命令文を実行した後からでも」,変数を定義して使うことができます.int a = 10; ←2バイトを確保して-32768〜32767までの符号付整数を格納できる.
Visual Basicでの例
float x = 0.5;←4バイトを確保して浮動小数点数を格納できる.
Dim work As String←workという変数を文字列型として使う
Dim tmp As Integer←tmpという変数を整数型として使う この「便利さ」「ゆるやかさ」が逆に,最も簡単な「+という演算子の危険な落とし穴」につながります. すなわち,javascriptでは「文字列の結合」にも「数値としての足し算」にも同じ演算子(+)を使うので,1つでも文字列が含まれている場合には,文字列の結合として処理されます.
【文字列の結合】
'ab'+'cd'→'abcd'になる '1'+'1'→'11'になる '2'+3 →'23'になる 【数値としての足し算】 1+1 → 2になる 2+3 → 5になる |
javascriptは,プログラマーに甘く,少々のミスはカバーしてくれる「便利さ」「ゆるやかさ」がありますが,少なくとも一方が文字列であるときのプラスの演算だけは必ず文字列の結合と解釈される.
【+の落とし穴からの逃げ方】 (ア) 必ず文字列として使いたいとき
xx1+''+xx2 のように空文字''を追加して1つを文字列にすると全部が文字列結合の演算になる.
(イ) 必ず数値として使いたいとき
xx1*1 + xx2*1,xx1/1 + xx2/1 のように掛け算,割り算を付ける.
この場合,上記のEFGのように数字でないものが含まれていれば,NaNとして処理される. Dの代わりに,str1 = '12'*1 + '3'*1;やstr1 = '12'/1 + '3'/1;とすると15になる |
(参考) BASIC系など他のプログラミング言語には累乗をカレット(^)で表すものもありますが,C言語やjavascriptには累乗を表す「演算子」はありません. ビルドイン・オブジェクトには,Math.pow()というメソッド(関数)があります.…累乗(power)の先頭3文字をとったものでしょう.Math.pow(底, 指数)の形で使えます.[底は実数,指数も実数]
【例7.1】
nn1 = Math.pow(2, 3); document.write(nn1); によりが計算でき,結果として8になります. 【例7.2】 nn1 = Math.pow(2, 1/2); document.write(nn1); によりが計算でき,結果として1.4142135623730951になります. 【例7.3】 nn1 = Math.pow(0.99, 1.01); document.write(nn1); によりが計算でき,結果として0.9899005066748408になります. |
しかし,この教材の作者は,このpow()関数をめったに使いません.指数が正の整数の場合は,次のように * を繰り返せばよいからです.
【例8.1】
nn1 = 2 * 2 * 2; document.write(nn1); によりが計算でき,結果として8になります. 【例8.2】 nn1 = 1; for(kk1 = 0; kk1 <10; kk1++) nn1 *= 2;←2を10回掛ける document.write(nn1); によりが計算でき,結果として1024になります. |
【演習】javascriptを使って,次の計算を行い,計算結果を画面上に表示してください. (けた数が多いとき,通貨などでは3けたごとにカンマで区切る書き方をしますが,プログラム上では小数点以外の区切り記号は使わないようにしてください.カンマで区切ると全く別のものになります.)
(1)13579+48206
解答を見る
(2)123456-18276 (3)9631*8642 (4)7711/31
(1) document.write(13579+48206);により61785と表示されます
(2) document.write(123456-18276);により105180と表示されます (3) document.write(9631*8642);により83231102と表示されます (4) document.write(7711/31);により248.74193548387098と表示されます |
例えば,分数のは割り算に直すなどして,次の計算を行い,計算結果を画面に表示してください.(割り切れないときは,小数表示のままでよい)
(5)
解答を見る
(6) (7) (8)
(5) document.write(-3-12/(-2));により3と表示されます
(6) 先に分数の値を求めるには,document.write(4*(3/5));とします.2.4と表示されます. ただし,4*3を先に行っても結果は同じ結果になるので,document.write(4*3/5);でも2.4になります. (7) document.write(7*((3-5)/4+6));により38.5と表示されます (8) document.write((3/5)/(-3/2)+1/2);により0.10000000000000003と表示されます ※正確な分数計算では となるはずであるが,最後のけたが四捨五入された結果になっているので,正確には一致しないこともあります. |
javascriptを使って,次の計算を行い,計算結果を画面上に表示してください.
(9)
解答を見る
(10) (11) (12) |
(9) document.write(5 * 5 * 5 * 5);により625と表示されます.
(10) document.write(10*10-11*11+12*12-13*13);により−46と表示されます. (11) 指数が正の整数でないときはMath.pow()を使うとよいでしょう.
aa1 = Math.pow(3, 0.5)-Math.pow(2, 0.5);
により0.31783724519578205と表示されます.document.write(aa1); (12) 底が正の整数でないときはMath.pow()を使うとよいでしょう.
aa1 = Math.pow(1.01, 0.99);
により1.009899506658176と表示されます.document.write(aa1); |