2022/03/1(火) JSprimer (JavaScriptとは)
JavaScriptとは
JavaScriptは、主にウェブブラウザの中で動くプログラミング言語です。 ウェブサイトで操作をしたら表示が書き換わったり、ウェブサイトのサーバーと通信してデータを取得したりと主にユーザーに見える部分の動作を担う言語です。仕様は、ECMAScriptによって動作が決められています。
- JavaScriptは、ウェブブラウザ上で動くプログラミング言語です。
- 仕様は、ECMAScriptによって決められています
ECMAScriptとは?
ECMAScriptはJavaScriptの仕様を定義したものです。仕様とは決まりごとのことで、ブラウザなどがJavaScriptを読み込んだときに、どのような文法を解釈しなければならないか、処理がどのように動くべきかといったことを決めたものです。
- 関数宣言の書き方はこういう文法になる
- 変数が宣言されたとき、JavaScriptエンジンはこういう動作になる
- StringやArrayオブジェクトにはこういうメソッドがある
- 例えば、上記のようなJavaScriptにおける基本的な決まりを定めているものです。
- ECMAScriptでは、どの実行環境でも共通な動作のみが定義されているため、基本的にどの実行環境でも同じ動作をします。
- まとめると、ECMAScriptとは、どの実行環境でも共通な動作のみが定義されているJavaScriptの核となる仕様のことです。
- 「ECMAScript」はどの実行環境でも共通の部分を表す
- 「JavaScript」はECMAScriptと実行環境の固有機能も含んだ範囲を表す
- まとめると、JavaScriptでは、基本的な共通の使用であるECMAScriptに独自の実行環境の固有機能を加えたものであると考えると分かりやすいでしょう。
JavaScriptの言語的な特徴①大文字と小文字を区別する
- JavaScriptは大文字小文字を区別します。
- 同じnameでもNAMEとnameでは、別々の名前として認識されるということです。
JavaScriptの言語的な特徴②予約語を持つ
- JavaScriptには特別な意味を持つキーワードのことを予約語と呼びます。
- 予約語と同じ名前の変数や関数は宣言できません。
JavaScriptの言語的な特徴③文はセミコロンで区切られる
JavaScriptは、文(Statement)ごとに処理していき、文はセミコロン(;)によって区切られます。 特殊なルールに基づき、セミコロンがない文も、行末に自動でセミコロンが挿入されるという仕組みも持っています。しかし、暗黙的なものへ頼ると意図しない挙動が発生するため、セミコロンは常に書くようにします
- 基本的には、文をセミコロン(
;
)で区切るように記述していきます。 - スペース、タブ文字などは空白文字(ホワイトスペース)と呼ばれ、文に記述しても挙動に影響はありません。
JavaScriptの言語的な特徴④strict mode
JavaScriptにはstrict modeという実行モードが存在しています。 古く安全でない構文や機能が一部禁止されています。
use strict
という文字列をファイルまたは関数の先頭に書くことで、strict modeが有効になります。
"use strict"; // このコードはstrict modeで実行される
- "Module"の実行コンテキストでは、このstrict modeがデフォルトの仕様となっています。
- strict modeでは開発者が安全にコードを書けるように、レガシーな機能や構文を禁止したり、明らかな問題を含んだコードに対しては早期的に例外を投げたりすることでJavaScriptの落とし穴を一部ふさいでくれます。
JavaScriptの言語的な特徴⑤実行コンテキスト: ScriptとModule
- JavaScriptの実行コンテキストとして"Script"と"Module"があります。
- 実行コンテキストとは、実行環境のことです。
- "Module"の実行コンテキストは、デフォルトがstrict modeとなり、古く安全でない構文や機能は一部禁止されています。
コンテキストとは?
同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすることを指してコンテキストということがある。 コンテキストe-Words
- (変数)の中身によって異なる処理を行う場合はstate
- (変数)の中身によらず同じ処理を行う場合はcontext
- contextの「状態」が「りんご」でも「バナナ」でも「グラボ」でも何であっても、カートに入れて、レジ通して、支払して、バッグに入れるという一連の「処理」は変わりません。