JavaScriptの式の評価は、算数で習ったように、乗除算は加減算より優先して実行される。各種演算の優先順位を一覧表にした。プログラムに説明を加えたり、一部のプログラムを実行させないようにするために、コメント機能を備えている。
(2024年2月11日)練習問題を追加。TeX画像をMathJaxに置き換え。
演算の優先順位
JavaScriptの式の評価は、算数で習ったように、乗除算は加減算より優先して実行される。 \( 1+2 \times 3 \)の解は9ではなく7だ。
これまで紹介してきた演算の優先順位は、算数・数学で習ったものに準ずる。ここで、優先順位を一覧にしておこう。
これまで紹介してきた演算の優先順位は、算数・数学で習ったものに準ずる。ここで、優先順位を一覧にしておこう。
順位 | 演算子 | 演算 |
---|---|---|
1 | (...) | グループ化 |
2 | i++, i-- | 後置インクリメント 後置デクリメント |
3 | !a ~a ++i i-- typeof | 論理否定 ビット否定 前置インクリメント 前置デクリメント typeof |
4 | ** | べき乗 |
5 | * / % | 乗算 除算 剰余算 |
6 | + - | 加算 減算 |
7 | <<, >> | ビットシフト |
8 | <, <=, >, >= | 比較演算 |
9 | ==, === !=, !== | 等価演算 不等価演算 |
10 | & | ビット論理積 |
11 | ^ | ビット排他的論理和 |
12 | | | ビット論理和 |
13 | && | 論理積 |
14 | || | 論理和 |
15 | =, +=, -=, **=, *=, /=, %=, <<=, >>=, >>>=, &=, ^=, |=, &&=, ||= | 代入演算 |
16 | , | カンマ |
10: let a = 1, b = 2;
11: let c = a / b;
26: if ((year >= 1980) && (year <= 1989)) {
27: a = 'です';
28: } else {
演算の優先順位が曖昧なときは、グループ (...) で囲って明示した方がいい。
JavaScriptでは、セミコロン ; までが1つの式として評価される。途中で改行しても連続した式と認識される。長い式は、途中で改行した方が読みやすいだろう。
JavaScriptでは、セミコロン ; までが1つの式として評価される。途中で改行しても連続した式と認識される。長い式は、途中で改行した方が読みやすいだろう。
コメント
20: //ページのロード時に実行
21: window.onload = function() {
22: let ua = navigator.userAgent.toUpperCase(); //大文字変換
23: let res; //判定結果
複数行コメント /* ... */ は、これが囲まれた部分(1行でも複数行でもいい)をコメントとして実行しない。コメントはネストできないので、*/ が出てきた時点で、すべてのコメント終了となる。
19: <script>
20: /**
21: * 計算と画面表示
22: */
23: function execute() {
練習問題:演算の優先順
コラム:アセンブラ、コンパイラ、インタプリタ
機械語の命令を、それに近い英単語(または略号)に置き換えたものがアセンブリ言語と呼ばれるプログラミング言語である。人間が読むことはできるが、CPUの種類によって変わることは同じで、そのCPUの命令体系を熟知していないと理解は難しい。アセンブラ言語で書かれたプログラムは、アセンブラを介して機械語に翻訳され、CPUが直接実行できた。
1950年代後半、CPUによる差異を無くし、人間が読みやすいように(作りやすいように)作られた FORTRAN、COBOL、LISP といったプログラミング言語が登場した。これらは高級言語(高水準言語)と呼ばれ、アセンブラは低級言語(低水準言語)として区別された。高級というのは「高価」という意味ではなく、人間が読める水準にあるという意味だった(高級言語の開発環境は高価ではあったが‥‥)。
当時の高級言語は、コンパイラという仕組みを介して、各々のCPUに合ったアセンブラ言語に翻訳され、最終的にCPUが直接実行できる機械語にしてから実行するというものだった。
JavaScriptは、CPUに依存しないが、コンパイラを介してプログラムを実行しているわけではない。ファイルやメモリからプログラムを逐次読み出ししてCPUに実行させている。このような仕組みをインタプリタと呼ぶ。
JavaScriptは、CPUに依存しないが、コンパイラを介してプログラムを実行しているわけではない。ファイルやメモリからプログラムを逐次読み出ししてCPUに実行させている。このような仕組みをインタプリタと呼ぶ。
かつては、コンパイラで作られたプログラムはインタプリタより実行速度が速かったのだが、最近のコンパイラは純粋なアセンブリ言語に翻訳しなかったり、逆にインタプリタでもコンパイル機能を備えたものが登場(PHP 8:JITによる高速化)したことなどにより、両者の境界は曖昧になっている。
(この項おわり)