JavaScript言語仕様

JavaScriptは、厳密な型チェックや豊富な構文、制御文を持たない単純な構造のオブジェクト指向言語です。そのため、JavaScriptは Javaの置き換えのような用途に使用するのではなく、Javaアプレットの機能の一部を補うような用途に使用するための言語といえます。

Javaは高速にプログラムを実行したり、厳密な型チェックやセキュリティ保全を行いつつ、ネットワーク上で使用可能な設計された高機能な言語です。Javaでのプログラミングはすでに備わっている「クラス」を組み合わせたり、「差分」をプログラムしたりして行われます。そのため、プログラミングに際して「クラス」についての広範囲な知識や厳密な文法などの知識が必要とされます。

JavaScriptはこれとは対照的に、シンプルで小さな「クラス」階層として定義されたオブジェクト群を、動的に使用可能にする言語です。やさしい構文、提供される数々の機能やオブジェクト、必要最小限の定義でプログラムが作成できるなどのことから、幅広いユーザが手軽に使用できるプログラミング言語となっています。

この章では、JavaScriptの基本的な言語仕様について解説します。

言語仕様解説 (このページのコンテンツ)

予約語
予約語とは、JavaScriptの初期値として持っている処理系側で、既に使用されている「名前」のことを指し、スクリプトで利用する変数名や関数名として使うことができないキーワードです。
例えば forというキーワードは、JavaScriptの制御文のキーワードとして使われているので、同じ名前の変数名に割り当てることができません。
JavaScript予約語一覧
abstract、boolean、break、byte、case、catch、char、class、const、
continue、default、do、double、else、extends、false、final、
finally、float、for、function、goto、if、implements、import、in、
instanceof、int、interface、long、native、new、null、package、
private、protected、public、return、short、static、super、switch、
synchronized、this、throw、throws、transient、true、try、var、void、
while、with、
文の区切り
通常、1行に1つの実行文を記述します。実行文の区切りはセミコロン「;」を用いています。
実行文は、場合によっては1行に2つ以上の実行文を記述する場合もありますが、セミコロンで明確に区切る必要があります。なお、1行だけの実行文ではセミコロンを省略することも可能です。
 1行で複数の実行文のサンプル
  a = 1; b = 2; c = a + b;
ブロック
JavaScriptには様々な制御文が用意されています。例えば、a が 10かどうかを判定し、もし真(条件が成り立つ)なら、a に1を加え、偽(条件が成り立たない)の場合は、a から1を引く処理を考えてみると、ブロックという概念が必要になります。
  if (a == 10) {
       a = a + 1;
      }
      else {
           a = a - 1;
      }
{ と } で囲まれた部分は、1つの実行文の「かたまり」として扱われます。これが、1つのブロックです。上記のような制御文や関数の実行文なども、こうしたブロックを用いて記述します。
オブジェクト
JavaScriptでは、必ずというくらい利用されるオブジェクトですが、オブジェクトとは日本語に直訳すると「もの」という意味があります。JavaScriptでは多くのオブジェクトが定義されています。
オブジェクトを利用することで、複雑なプログラムを組むことなく、ページの変化やある種の動作などの効果を得ることができます。
オブジェクト
JavaScriptでは、ウィンドウ、ドキュメント、フォーム、文字列など、ぺ一ジの表示に関わるさまざまなモノ(Object)を制御します。これらのモノはすべて「オブジェクト」と呼ばれます。それぞれのオブジェクトには、状態を変更するための「プロパティ」や、命令を実行するための「メソッド」が多数用意されています。
メソッド
メソッドとはあらかじめ用意されている命令です。JavaScriptには、オブジェクトごとにさまざまなメソッドがあります。たとえば、文字列オブジェクトには文字列の色やサイズを変更したり、文字列の検索や分割を行ったりするメソッドがあります。メソッドを使用する際には、必要に応じてカッコ内に引数を指定します。
プロパティ
プロパティとはオブジェクトの属性です。たとえば、document (ドキュメント) オブジェクトにはドキュメントの背景色や文字色、ドキュメントの URI、タイトル、ドメインなどの属牲があります。これらをスクリプトを使って参照または設定することによって、ページの背景色を変えたり、別のページに移動させるなどの動作を実現できます。
JavaScriptで扱うことができるデータ型
JavaScriptは、他のプログラミング言語と異なり、厳密な方チェックをしないという特異なデータ型を持つ言語です。ここでは、JavaScriptで扱うことのできるデータ型を説明します。
データ型
JavaScriptでは、大きく分けて次に示す3つのデータ型と null が扱えます。
  1. 数値型  数値を扱うためのタイプ
  2. 論理型  真(true)と、偽(false)のいずれかを取るタイプ
  3. 文字列型 "Hello" などの文字列を扱うタイプ
  4. null   無効な値を示す特殊な値(ヌルコードと呼ぶ)
これら以外にもオブジェクトで定義することにより、日付型などのような特殊な形式を扱うことも可能です。また、この他にも特殊文字や色を表す定数などもあります。
定数
プログラムの中で実行時に変化させる必要が無く、任意の値を指定するために使用するものを「定数」と呼びます。
例えば、a = 12; や b = "value"; などのような使われ方をした場合、12value は定数と呼ばれます。定数には、整数型定数と呼ばれる形式があります。
整数型定数
整数型定数とは、先頭の数値が 0以外の数字または、+、- の符号で始まる数は 10進数の整数として扱われます。
1つの例として 123、+5、-24
浮動小数点型定数
次のような形式の数は、浮動小数点として扱われます。
[ ] で囲まれたパラメータはオプションですので、必ずしも必要ではありません。< >で囲まれた数値は小数点以下の数値です。
1.[符号(+/-)][数値].<数値> 例:1.414、.12、-0.5
2.[符号(+/-)][数値].[数値]e.<符号(+/-)数値> 例:0.27e+1、15.2e+1
(2)の例は、浮動小数点特有の書き方ですが、e の後ろの数字は、小数点をどのようにずらすかを示しています。例えば、0.27e-2 は 0.0027 を示し、15.2e+1 は 152.0 を示します。
8進数、16進数
コンピューターの基本的な数値は 0 と 1 の2進数であらわしています。8進数や16進数とは、2進数を人間が見やすい形にするためで、2進数の3桁を一区切りにすると、8進数、4桁を一区切りにすると16進数に直すことが できます。JavaScriptでは、8進数および16進数を扱うことができます。
8進数
8進数は、0 から 7 までの数を利用して表現し、7の次は桁上がりして 10となります。すなわち、8進数の 25は、10進数では 8*2+5 で 21ということになります。
JavaScriptでは、8進数を10進数と区別するために、値の前に 0を付けて表現します。
例:8進数  05  021
  10進数     5     17
16進数
16進数では、0から 9までの数字と、Aから Fまでのアルファベットを使用し、10進数でいう 0から 15までの数を表します。
すなわち、16進数の 1A は、10進数の 25 ということになります。JavaScriptでは、値の先頭に 0x を付け、16進数では次のように記述します。
例: 0x1F1A
論理型定数
論理型とは、「真」または「偽」の2つの値をとる型です。条件式を判断した場合に成り立つ時に「真:true」を、成り立たない時には 「偽:false」を返します。
変数にこれらの値を直接代入する際には、真、偽はそれぞれ true、false という名前で以下のように代入します。
 a = true;
 b = false;
また、次のような使われ方もします。
 while (true) {
        :
  if ( a == x ) break;
        :
 }
ここでは while文の評価で常に値が「真」に返るようにして、ブロックの途中で条件式( a は x と等しいか?)を満たした場合にのみ、このブロックを抜けるような動作をします。
文字型定数
文字型の定数は、ダブルコート( " )またはシングルコート( ' )で囲まれた文字としてあらわします。
a = "hello JavaScript";
なお、ダブルコートとシングルコートの対応は、間違えやすいので気をつけてください。
特殊文字
改行コード等の文字として表せない文字は、一般的に特殊文字と呼ばれています。JavaScriptでは、以下のような形で表記します。
\b  ---  バックスペース
\f  ---  form のフィールド
\n  ---  改行
\r  ---  キャリッジ・リターン
\t  ---  タブ
色名 (Color Name)
JavaScriptで扱える色名は、全136色、138種の色名があります。中には、非常にロマンチックな名前もあます。実際の色の表示にはユーザ環境に依存するものが圧倒的に多く、必ずしも望む色に表示するとは限りません。
JavaScriptで扱う色名 カラーパレット
変数
変数とは、プログラムの中でデータを汎用的に扱う際に使用します。データの入れ物とお考えください。 例えば、次のようなプログラムを書くことにより、a には 20 という数字が入ります。これを「代入」と呼びます。代入させる値は = の後に記述します。
a = 20;
そして、次のように書くことにより、a の中身が1つ加えられ a は 21になります。
a = 20;
a = a + 1;
変数名の規則
基本的に変数名は任意ですので、自由に名前をつけることができますが、最低限の規則があります。
  1. 変数名の先頭はアルファベット「a〜z」、「A〜Z」、アンダーバーのいずれかの文字で始めなければならない。
  2. 変数名の名前は、アルファベット「a〜z」、「A〜Z」、「0〜9」、アンダーバーの文字しか使用してはいけない。ハイフン(-)などは使えない。
  3. 大文字と小文字は厳密に区別されるため a と A は違うものとして判断される。(bgColorと bgcolorもまったく違うものとして判断される)
  4. あらかじめ設定されている予約語を変数名として使用することができないため、、myとかアンダーバーなどを付けて記述するようにします。  例: Date → myDate、_Date
グローバル宣言
変数名を宣言し、任意の値で初期化するためには varを使用します。一時的に使用する変数では、必ずしも必要ありませんが、この宣言を用いることで、有効ブロック内で変数としてきちんと扱われますので、宣言することが推奨されています。
構文としては次のような形になります。なお、[ ] で囲まれたパラメータはオプションですので、必ずしも必要ありません。
var 変数名[ = 初期値]
変数の有効ブロックは、関数内で宣言した場合は、関数の範囲内であり、関数の外で宣言した場合はグローバル関数(プログラム中のどこからでも、操作や参照が可能な変数)として扱われます。
なお、グローバル関数名として使用されているものと、関数内で使用されるローカル関数名が同じである場合などには、必ず宣言が必要となります。また var は、定数などの特定の値に名前をつけて参照したい場合などにも、便利に使用することができます。
型変換
JavaScriptでは、データの型に関して厳密なチェックは行われず、必要に応じて変化し適用されます。
例えば次のように変数ban に数値を代入したとします。
var ban = 123;
この状態では、banは数値型の変数として扱われますが、
ban = "数値は" + 123;
として代入した場合、数値型である 123は文字列の "123"として扱われ、結果として、banは「数値は123」という値が代入されて、文字型変数として扱われるようになります。曖昧といえば曖昧ですが、場面によっては便利な機能です。
配列
配列とは、配列の名前および添字(インデックス)を組み合わせて示すことができるセットのことです。インデックスの中身(配列された値)を要素とも呼びます。
JavaScriptは明確な配列データ型をもちませんが、配列およびオブジェクトのプロパティの格納形式を利用することで、簡単に配列を作ることができます。
例えば、次に示すような関数で、配列オブジェクト型を定義することができます。
function MakeArray(n) {
     this.length = n;
     for ( var i =1; i <= n; i ++ ) {
       this[i] = 0
       return this
       }
  }
この関数は、最初のプロパティのように配列を定義し、その長さを length (配列インデックスが 0 の配列要素の中にこれが入る) として持たせ、それに続いて配列を作成し、それらの値を 0 に初期化します。
配列を作成する際には、この関数 newで配列名を添えて呼びます。
myArray = new MakeArray(10);
これは、10個の要素(配列の値=インデックス)を持つ myArrayと呼ばれた配列を作り、その中身を 0に初期化します。この配列の要素は、次のように通常の変数と同じように使用することが可能です。
myArray[1] = 1
myArray[2] = 3.14
myArray[3] = "hello"
※ この章は、メールマガジン 「第40号」 で掲載された記事を転載しています。


This Page is HTML4.01 Valid! 初版公開日 2003年3月16日   最新更新日 2004年3月11日
Copyright(C) 2002〜2004 banban@scollabo.com