JavaScriptの基礎
言語の特徴など
- 動的なウェブサイト構築などを目的として作られたスクリプト言語(もともとはNetscape社が開発.1995年に登場)
- 大半のウェブブラウザに実行環境が実装されている.
- 最近は標準化団体Ecma Internationalによって,ECMA Scriptという名称で共通仕様が定められつつある
- 特に,2015年のES2015(ES6)の策定により,JavaScriptを取り巻く環境は激変した
- 非常に多くのライブラリ(フレームワーク)があり,大規模開発にも使われる.
- node.js等の登場(2009年)により,サーバサイドでJavaScriptを実行する環境も整いつつある.
- Java言語とは異なるが,構文的には似た点も多い.(C言語にも似たところがある)
JavaScriptで書かれたプログラムの実行方法
ブラウザを使う
chromium-browserやFirefox(でなくても,大抵のブラウザならOK)を起動して,アドレス入力欄に
javascript: alert("Hello, world!");
などと入力すれば(1行スクリプトではあるが)実行できる.C言語ライクに書くなら
javascript: console.log("Hello, world!");
である.console.logを使った場合は何も表示されず,実行されていないように見えるが,Firefoxの場合ならF12キー(またはCtrl+Shift+Iでも良い),あるいは「ツール」メニューから「ウェブ開発」「開発ツールを表示」とすると開発者ツールウィンドウが現れるので,その中から「コンソール」タブを選択すればHello, world!
がちゃんと出力されていることが確認できる.
さて,複数行に渡るプログラムを実行する場合,アドレス入力欄に(セミコロンで区切られた命令文を)すべて入力するのは大変なので,別途,HTMLを書いてその中に実行したいJavaScriptプログラムを埋め込み,そのHTMLをブラウザに読み込ませることが行われる.
HTMLの解説ページにも少しだけ記載しているが,次のようなひな型を基本として,これをブラウザで開けばよい.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
なお,HTMLファイル中に直接,プログラムを記述しなくても,6行目(や12行目)の部分を
6 |
|
と書き換えて,ファイルprog.js
の内部にJavaScriptプログラムを記述しても構わない.JavaScriptプログラムのファイル拡張子は通常,.js
である.
確認
<script>
タグのsrc
属性に記述するファイルの実際の存在位置に注意すること.この例の場合はHTMLファイルと同じディレクトリ内にあること.
ブラウザを使わない場合
いろいろ方法があるが,この講義では(サーバサイドのJavaScript実行環境である)node.jsを使った実行をお勧めする.特に,通信系のソフトウェア開発を行う班は今後もnode.jsを頻繁に使うことになるだろう.
最新版node.jsの環境を作成する手順については別ページで.
node.jsが利用できる環境であれば,
$ node sample.js
とすればJavaScriptで書かれたプログラムsample.jsを実行することができる.
基本文法
print
いわゆるC言語のprintf(),あるいはJava言語のprintln()に相当する関数は,JavaScriptには定義されていない!ので,通常はconsole.log()
を使う.console.logでは,文字列に限らず,さまざまなオブジェクトを出力できる.
1 2 |
|
- もちろん,alertを使う手もある.
- HTMLとの連携を前提としてよいなら,HTML文書中に直接書き込む
document.write()
とかdocument.writeln()
などもある.
コメント
C言語やJava言語と同様に書ける.
1 2 3 4 |
|
文
これもC言語やJava言語と同様で,文の最後にセミコロン(;
)を付ける必要がある.
変数
var
で宣言する(ES2015からはlet
やconst
も追加された).JavaScriptにおける基本型には boolean
,number
,string
の3種類がある(逆に言えばこれしかない)が,型による宣言の仕方に違いは無い.
1 2 3 4 |
|
変数の型はtypeof
演算子で調べることができる.
5 6 7 8 |
|
C言語などに比べて大きく違うのは,変数自体には型が無く,自由に代入できる,という点がある.つまり,
9 10 |
|
が普通に書けてしまうので注意すること.(グループ開発時は特に気をつける必要があるかも!)
また,数値(number型)に関しても,すべてが実数として扱われ,"整数型"とかいう区別もないので注意しよう.
演算
演算結果は全て実数(number)型になる.
1 2 3 4 5 |
|
代入演算子,インクリメント,デクリメント
C言語と全く同様に使える.
1 2 3 4 5 6 7 8 9 10 |
|
文字列
- シングルクォート(
'
)またはダブルクォート("
)で囲む- 両者は全く等価(C言語とは異なる!)
\t
(タブ)や\n
(改行)などの特殊文字も利用できる
1 2 |
|
配列
配列の生成
1 2 3 |
|
- JavaScriptには値が存在しないことを示す特別な
undefined
値がある
配列の参照と代入
1 2 3 4 |
|
- JavaScriptの場合,範囲外アクセスが普通に可能なので注意すること!
要素の個数
1 2 |
|
配列の操作
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- 他にも,ary.{
slice()
,splice()
,concat()
,sort()
,reverse()
,filter()
,map()
}などの便利なメソッドが存在するので,必要な場合は調べてみよう.
連想配列
JSON記法(JavaScript Object Notation)を使うと,オブジェクトを連想配列のように扱うことができる.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
- 要は,配列(Array)を
[
,]
で,オブジェクト(Object)を{
,}
で記述する,というルール - オブジェクトについては,応用編のページで.
文字列操作
結合
1 2 |
|
分割
1 |
|
文字数(文字列の長さ)
1 2 |
|
検索
1 2 3 |
|
切り出し
1 |
|
条件式
これもC言語とほぼ同様だが,真の場合にはtrue
,偽の場合にはfalse
が返される.
(戻り値がboolean
型,ということ)
代表的な条件式は以下.
条件式 | 説明 |
---|---|
a == b |
aとbの値が等しい |
a != b |
aとbの値が違う |
a < b |
aよりbが大きい |
a > b |
aの方がbより大きい |
a <= b |
aはb以下 |
a >= b |
aはb以上 |
a && b |
aかつbが成り立つ |
a || b |
aまたはbが成り立つ |
JavaScriptでは===
(厳密等価演算子)という演算子があるので覚えておこう.
等価演算子==
と厳密等価演算子===
の違いを表す例を以下に示す.
console.log(1 == 1); // true
console.log(1 === 1); // true
console.log('abc' == 'abc'); // true
console.log('abc' === 'abc'); // true
console.log('1' == 1); // true
console.log('1' === 1); // false
console.log(0 == false); // true
console.log(0 === false); // false
制御文
if
文やif-else
文はC言語とほぼ同様に書ける.
if (条件式) {
文1;
文2;
}
if (条件式) {
文1;
} else {
文2;
}
if (条件式1) {
文1;
} else if (条件式2) {
文2;
} else if (条件式3) {
文3;
} else {
文4;
}
while
文もC言語と同様.
while (var i < 5) {
...
i++;
}
for
文もC言語と同様.
for (var i = 0; i < 5; i++) {
...
}
for〜in
などの構文もあるので調べてみよう.
switch〜case
文もC言語とほぼ同様だが,case
の後に評価値を書ける点が異なる.
var a = 10
switch (a) {
case 5 + 3:
console.log('Case 5+3');
break;
case 5 + 5:
console.log('Case 5+5');
break;
default:
console.log('Other');
break;
}
関数
JavaScriptにおける関数定義は以下のように記述する.
function add(a, b) {
return a + b;
}
JavaScriptの関数は,変数に代入することもできる.(関数式)
var sum = function(a, b) {
return a + b;
};
ちなみに,変数や関数のスコープはC言語と同様に考えて差し支えないが,他言語と同様に,スコープは極めて重要なので意識してプログラミングすること.
簡単なJavaScriptプログラム例
現在時刻の表示
(言語にあらかじめ用意されている)組み込みオブジェクトDate
を使う.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
指定日までの残り日数表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
スクロール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|