JavaScript では下記の型を使用できます。
型 | 例 | 説明 |
---|---|---|
未定義(undefined) | undefined | 未定義値。 |
ヌル(null) | null | ヌル値。 |
真偽値(boolean) | true, false | 真偽値。 |
文字列(string) | "abc..." | 文字列。 |
数値(number) | 123, 123.45, 1.23e45, NaN | 数値。 |
オブジェクト(object) | var o = new Object() | オブジェクト。 |
関数(function) | function() { ... } | 関数。 |
シンボル(symbol) | Symbol("foo") | ES6(ES2015) で追加された型で、他の値と重複しないユニークなシンボル値を生成します。 |
変数や式の型を調べるには、typeof
演算子を用います。
JavaScript はオブジェクト指向というプログラミング上の思想を受け継いでおり、ウィンドウや、ドキュメントやフォーム部品などいろいろなものをオブジェクト(物)として扱います。オブジェクトには以下のようなものがあります。
□ オブジェクト(Object) ├□ シンボル(Symbol) ├□ 数値(Number) ├□ 文字列(String) ├□ 真偽値(Boolean) ├□ 配列(Array) ├□ マップ(Map) ├□ セット(Set) ├□ 数学関数(Math) ├□ 日付(Date) ├□ 関数(Function) ├□ 正規表現(RegExp) └□ ウィンドウ(Window) ├□ ナビゲーター(Navigator) │├□ プラグイン(Plugin) │└□ MIMEタイプ(MimeType) ├□ フレーム(Frame) ├□ イベント(Event) ├□ ヒストリ(History) ├□ ロケーション(Location) ├□ スクリーン(Screen) └□ ドキュメント(Document) ├□ レイヤ(Layer) ├□ 画像(Image) ├□ リンク(Link) ├□ アンカー(Anchor) ├□ アプレット(Applet) ├□ フォーム(Form) │├□ テキスト(Text) │├□ パスワード(Password) │├□ ファイルアップロード(File) │├□ 隠し部品(Hidden) │├□ テキストエリア(Textarea) │├□ チェックボックス(Checkbox) │├□ ラジオ(Radio) │├□ ボタン(Button) │├□ サブミットボタン(Submit) │├□ リセットボタン(Reset) │└□ セレクト(Select) │ └□ オプション(Option) └□ エレメント(Elements) └□ スタイル(Style)
オブジェクトは、値を参照したり設定するためのプロパティ(属性)を持ちます。例えば navigator
オブジェクトは、appName
や appVersion
などのプロパティを持ちます。
navigator.appName // ブラウザの名前 navigator.appVersion // ブラウザのバージョン
オブジェクトはまた、動作を指定する際に用いるメソッド(処理)をサポートしています。例えば window
オブジェクトは、alert()
や open()
などのメソッドを持ちます。
window.alert("Hello"); // 警告ダイアログを表示する window.open("xx.html", "_blank"); // 新しくウィンドウを開いて表示する
変数は、名前のついた箱のようなもので、中に数値や文字列などの値を保持することができます。例えば、下記の例は、「x
は 5
に等しい。」という意味ではなく、「x
という名前の変数に 5
という値を代入する。」という意味を持ちます。
x = 5; // x という変数に 5 を代入する
変数名にはアンダーバー(_
)を含む半角英数字を使用します。ただし、数字で始まるものや、JavaScript の予約語 (if
や while
など) は使用できません。実は、日本語も変数も使用できますが、日本語変数に対して誤動作をするライブラリもあるかもしれず、当面は半角英数字を使用することをお勧めします。
○ count_of_today = 123; ○ abc123 = 123; × 123abc = 123; // 数字で始まっているので使用不可 × if = 123; // if は予約語なので使用不可 ○ if_while = 123; △ 年齢 = 123;
大文字と小文字は別の変数とみなされます。下記の例では、name
と Name
は別の変数として扱われます。
name = "山田太郎"; Name = "田中次郎";
下記の例では、x
に 5
を代入し、y
に 3
を代入し、その合計をダイアログで表示しています。ここで、「5 を代入する」、「合計をダイアログで表示する」といった処理の単位を「文」と呼びます。
x = 5; y = 3; alert(x + y);
文の終わりにはセミコロン(;
)をつけます。セミコロンで区切ることにより、1行に複数の文を記述することができます。
xx = 5; yy = 3; alert(xx + yy);
ひとつの文を複数の行に分けて記述することもできます。
xx = 5; yy = 3; alert(xx + yy);
1行に1文しか記述しない時はセミコロン(;
)は省略することも可能ですが、JavaScript の習慣としては、つけておくことをおススメします。
xx = 5 yy = 3 alert(xx + yy)
//
から行末まではコメントとして扱われます。コメントには、プログラムの注釈(メモ)などを記述します。
xx = 5; // この部分にコメントを書きます
/* ... */
の間もコメントとして扱われます。
/* この部分はコメントです。*/
/* ... */
形式のコメントは、複数行にまたがることもできます。
/* * この部分がコメントです。 */
/* ... */
を入れ子(二重)にすることはできません。
/* コメントを /* 入れ子 */ にすることはできません。*/ ← error!!
ES2023 からは先頭行のみ #! で始まる場合はコメントとしてみなすようになりました。詳細は ES2023 を参照してください。
#!/usr/bin/node console.log("Hello world!\n");
JavaScript では、変数名や関数名などの大文字と小文字は別の文字として扱われます。例えば、下記の変数はいずれも別の変数として扱われます。
filename = "aaa.htm"; FileName = "bbb.htm"; FILENAME = "ccc.htm";
JavaScript の予約語には下記などがあります。一部はまだ将来のための予約語ですが、変数名や関数名としては使用しないようにしてください。
ES5 ではストリクトモードがサポートされました。通常ではエラーとならないコードに対してエラーを発生させることにより、プログラミングのミスを見つけやすくします。ストリクトモードにするには、プログラムの一番先頭に "use strict"
という文字列を記述します。
"use strict";
// 通常の JavaScript プログラム
関数毎にストリクトモードを適用するには、関数の一番先頭に記述します。
function func(x, y) {
"use strict";
// 通常の JavaScript プログラム
}
ストリクトモードの場合、通常モードではエラーにならない、下記などの事象でエラーが発生するようになります。
// 未定義の変数に対する代入 x = 5; // 書き込み禁止属性への代入 var obj1 = {}; Object.defineProperty(obj1, "x", { value: 42, writable: false }); obj1.x = 5; // getter関数への代入 var obj2 = { get x() { return 17; } }; obj2.x = 5; // 拡張禁止オブジェクトへの拡張 var obj3 = {}; Object.preventExtensions(obj3); obj3.x = 5; // プロパティではない変数の削除 var x = 5; delete x; // 削除不可プロパティの削除 delete Object.prototype; // 関数引数の重複 function func(x, x) { return x + x; } // 0で始まる8進数の使用 x = 0755; // with の使用 with (location) { href = url; } // arguments.callee の使用 function func1() { func2() } function func2() { console.log(arguments.callee); } func1();
eval
の中で "use strict"
を宣言した場合、eval
の中の var
変数は、eval
外に影響を与えません。
var x = 5; var y = 5; eval("var x = 8; x"); eval("'use strict'; var y = 8; y"); console.log(x); // 8 console.log(y); // 5
上記の他にも、まだ、ストリクトモードによって変更される点がありますが、詳細は別途...