JavaScript(ECMAScript5)の基本構文を紹介します。この記事は、2017年3月に調べたものを紹介しています。

記述方法

HTMLに埋め込む方法

scriptタグは、headerやbodyに埋め込み可能です。
かつては、 <script language="JavaScript"> としていたようですが、最近のブラウザであればtypeで大丈夫ではないでしょうか。また、コメントで囲む必要もないようです。

イベントハンドラに埋め込む方法

HTMLのイベントハンドラに直接JavaScriptを書くことができます。

外部のソースファイルを読み込む方法

scriptタグのsrc属性にファイル名を指定します。また、読み込むファイルの文字コードを明示しておくと良さそうです。
また、特に問題がなければ「</body>」の直前に記述するのが良いようです。

変数宣言

変数宣言には、「var」を用います。型指定はありません。

関数

関数定義

関数定義は以下の通りです。(関数リテラル)

ちなみに、JavaScriptの関数は、関数のオブジェクトです。

関数呼び出し

関数の呼び出し方法は以下の通りです。

関数呼び出しの際に、引数が足りない場合、その引数にはnullが渡されます。

可変長引数

可変長引数に該当するような構文はありませんが、関数内で「arguments」オブジェクトを使うと似たようなことができます。

参考: https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_the_arguments_object

無名関数

無名関数もサポートされています。無名関数は、変数に代入可能です。「function(引数リスト){}」の形式で定義できます(関数名を省略した形です)。

クラス

クラス定義に対応する構文はありません。ただし、「prototype chain」と呼ばれる仕様を利用することで、クラスのような振る舞いを記述できます。

メソッド定義は以下のように書くことも出来ます。

JavaScriptは、this必須です。また、JavaやC++のthisとは仕様が異なるため、注意が必要です。JavaScriptのthisの仕様は、「ある関数が呼び出された際にその関数を格納していたオブジェクト」を指します。普段はあまり意識することはないかもしれませんが、コールバック関数として登録した場合などには注意が必要です。コールバック関数としてメンバ関数を登録し、thisを固定するには「bind」を使います。詳細はこちらを御覧ください。

メソッドのオーバーロード

対応していません。

静的メンバ

クラスの仕様がないため、該当する仕様はありません。ただし、JavaScriptのオブジェクトは連想配列であり、関数をプロパティとして持つことができるため、その仕様を利用すると、静的メンバ変数や関数相当の機能を実現できます。

オブジェクト生成(new)・メンバへのアクセス

「new」を使用します。new のあとには、コンストラクタ用の関数を指定します。

メンバへのアクセス方法

オブジェクトのメンバにアクセスするためには、ドット演算子「.」を使用します。

アクセス修飾子

ありません。すべてのメンバが、外部からアクセス可能です。

継承

prototype chainを利用することで、継承に近い記述が可能です。
(http://www.yunabe.jp/docs/javascript_class_in_google.html より引用)

コンストラクタ・デストラクタ

クラスの定義方法で紹介したように、コンストラクタ関数の定義は可能です。

インタフェース定義

該当する仕様はありません。

演算子

算術演算子

四則演算 + – * /
剰余 %

代入演算子

代入 =

論理演算子

論理積 &&
論理和 ||
否定 !

比較演算子

大小比較 >  <  >=  <=
等しい(型変換後に比較) ==
等しくない(型変換後に比較) !=  <>
等しい(型が等しく、値も等しい) ===
等しくない(型もしくは値が等しくない) !==
3項演算子 (条件) ? (true) : (false)

型演算子

キャスト なし
型を調べる 変数 instanceof コンストラクタ関数名
例) a instanceof MyClass
型を調べる typeof 変数 例) typeof n

instanceof は、指定したオブジェクトがどのコンストラクタから生成されたかを判別します。一方、typeofはその変数の(JavaScriptにおける本当の)型名を文字列で返します。

ビット演算子

ビット積 &
ビット和 |
否定 ^
排他的論理和 ~
左シフト <<
右シフト >>

文字列演算子

文字列結合 +

コメント

コメントは、以下の形式がサポートされています。

配列

JavaScriptではそもそも全てのオブジェクトが連想配列(マップ)です。ただし、配列専用のArrayが用意されています。

Arrayの引数に数値を渡すと、配列のサイズを明示的に定義することができます。

また、配列の生成時に以下のように初期化することもできます。

値の取得・設定

値の取得や設定は [] を用います。

ちなみに、通常のオブジェクトのメンバにアクセスする際にも [] が利用できます。[] 内に文字列を渡すことで、オブジェクトのメンバにアクセス可能です。

要素数の取得

配列の「length」メンバにアクセスします。

条件分岐構文

if文とswitch文がサポートされています。

if文

switch文

ループ構文

for文

while文

foreach文(配列の列挙)

該当するような言語仕様はありません。(似たような構文に「for … in」がありますが、これは、オブジェクトのプロパティ名を列挙していく構文です)

break, continue

break、continueともにサポートされています。

演算子のオーバーロード

対応していません。

プロパティ(アクセッサ)

該当する仕様はありません。

インデクサ

対応していないようです。

Math関数

「Math」クラスの静的メソッドとして用意されています。

管理者がよく使うもの

円周率 Math.PI
三角関数 Math.sin Math.cos Math.tan Math.atan2
端数の切り捨て Math.floor
平方根 Math.sqrt
最大値 最小値 Math.max Math.min

インクルード(他ソースファイルの読み込み)

基本的にJavaScriptに該当する仕様はありません。ただし、HTML側から複数のファイルを読み込ませることができます。

エントリポイント(main関数)

特にエントリポイントの指定は必要ありません。上から順に実行されていきます。
多くの場合、HTML側で、bodyのonload時に関数を呼び出すことで、エントリポイントを指定することができます。

文字列リテラル

シングルクォート(””)もしくはダブルクォート(”)でくくります。特殊文字も使用可能です。

定数

ECMAScript5の時点では、該当する仕様はないようです。

参考にさせていただいた記事