JavaScript の基本文法

[up] [prev] [next]

目次

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 オブジェクトは、appNameappVersion などのプロパティを持ちます。

JavaScript
navigator.appName       // ブラウザの名前
navigator.appVersion    // ブラウザのバージョン

メソッド

オブジェクトはまた、動作を指定する際に用いるメソッド(処理)をサポートしています。例えば window オブジェクトは、alert()open() などのメソッドを持ちます。

JavaScript
window.alert("Hello");            // 警告ダイアログを表示する
window.open("xx.html", "_blank"); // 新しくウィンドウを開いて表示する

変数

変数は、名前のついた箱のようなもので、中に数値や文字列などの値を保持することができます。例えば、下記の例は、「x5 に等しい。」という意味ではなく、「x という名前の変数に 5 という値を代入する。」という意味を持ちます。

JavaScript
x = 5;      // x という変数に 5 を代入する

変数名にはアンダーバー(_)を含む半角英数字を使用します。ただし、数字で始まるものや、JavaScript の予約語 (ifwhile など) は使用できません。実は、日本語も変数も使用できますが、日本語変数に対して誤動作をするライブラリもあるかもしれず、当面は半角英数字を使用することをお勧めします。

JavaScript
 count_of_today = 123;
 abc123 = 123;
× 123abc = 123;           // 数字で始まっているので使用不可
× if = 123;               // if は予約語なので使用不可
 if_while = 123;
 年齢 = 123;

大文字と小文字は別の変数とみなされます。下記の例では、nameName は別の変数として扱われます。

JavaScript
name = "山田太郎";
Name = "田中次郎";

下記の例では、x5 を代入し、y3 を代入し、その合計をダイアログで表示しています。ここで、「5 を代入する」、「合計をダイアログで表示する」といった処理の単位を「文」と呼びます。

JavaScript
x = 5;
y = 3;
alert(x + y);

文の終わりにはセミコロン(;)をつけます。セミコロンで区切ることにより、1行に複数の文を記述することができます。

JavaScript
xx = 5; yy = 3; alert(xx + yy);

ひとつの文を複数の行に分けて記述することもできます。

JavaScript
xx =
   5;
yy =
   3;
alert(xx
   + yy);

1行に1文しか記述しない時はセミコロン(;)は省略することも可能ですが、JavaScript の習慣としては、つけておくことをおススメします。

JavaScript
xx = 5
yy = 3
alert(xx + yy)

コメント(/* ... */)

// から行末まではコメントとして扱われます。コメントには、プログラムの注釈(メモ)などを記述します。

JavaScript
xx = 5;   // この部分にコメントを書きます

/* ... */ の間もコメントとして扱われます。

JavaScript
/* この部分はコメントです。*/

/* ... */ 形式のコメントは、複数行にまたがることもできます。

JavaScript
/*
 * この部分がコメントです。
 */

/* ... */ を入れ子(二重)にすることはできません。

JavaScript
/* コメントを /* 入れ子 */ にすることはできません。*/ ← error!!

ES2023 からは先頭行のみ #! で始まる場合はコメントとしてみなすようになりました。詳細は ES2023 を参照してください。

JavaScript
#!/usr/bin/node
console.log("Hello world!\n");

大文字と小文字

JavaScript では、変数名や関数名などの大文字と小文字は別の文字として扱われます。例えば、下記の変数はいずれも別の変数として扱われます。

JavaScript
filename = "aaa.htm";
FileName = "bbb.htm";
FILENAME = "ccc.htm";

予約語

JavaScript の予約語には下記などがあります。一部はまだ将来のための予約語ですが、変数名や関数名としては使用しないようにしてください。

予約語
await, break, case, catch, class, const, continue, debugger, default, delete, do, else, enum, export, extends, false, finally, for, function, if, import, implements, in, instanceof, interface, let, new, null, package, private, protected, public, return, static, super, switch, this, throw, true, try, typeof, var, void, while, with, yield

ストリクトモード(strict)

ES5 ではストリクトモードがサポートされました。通常ではエラーとならないコードに対してエラーを発生させることにより、プログラミングのミスを見つけやすくします。ストリクトモードにするには、プログラムの一番先頭に "use strict" という文字列を記述します。

JavaScript
"use strict";
// 通常の JavaScript プログラム

関数毎にストリクトモードを適用するには、関数の一番先頭に記述します。

JavaScript
function func(x, y) {
  "use strict";
  // 通常の JavaScript プログラム
}

ストリクトモードの場合、通常モードではエラーにならない、下記などの事象でエラーが発生するようになります。

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 外に影響を与えません。

JavaScript
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

上記の他にも、まだ、ストリクトモードによって変更される点がありますが、詳細は別途...


[up] [prev] [next]
Copyright (C) 1996-2023 杜甫々
改訂版初版:2001年5月20日、最終更新:2023年7月30日
http://www.tohoho-web.com/js/basic.htm