JavaScript Language Specification
PART 3 JavaScript言語仕様




ここではJavaScriptの言語仕様について説明します。JavaScriptを書くときに必要な主要な単語や言い回しについての一覧です。この本は、CD-ROMからのスクリプトコピーを自分のページに貼り込めばそのまま動きますから、このようなプログラムの言語仕様を学ばなくても大丈夫(^^)なのですが、それを自分なりにアレンジして使おうということになるとやはり言語の仕様も知っておいたほうが便利です。そこで、ここでは簡単に調べやすいように基本的な事柄だけを選んでコンパクトに並べました。ただ、やはり何度も繰り返しますが重要なことはこれらを知ることではなくて、どう使うかだということを忘れないようにしましょう(^^)/

Guide

Value 数値の1と2は足すと3になりますが文字の1と2を足すとは言いませ ん。3にはなりませんね(^^)。だから、1+2と書いた時にそれがどちら かわからないとコンピューターも正しい答えを出すことができませ ん。そこで、プログラムの中では一般的に数値か文字かを注意深く区 別して使います。この場合、JavaScriptでは、文字なら'1'とか"2"と いう風にダブルクォート(")かシングルクォート(')で囲んで表現しま す。 数値型__ 1,-1,258,333 など 文字型__ '1','山',"高橋拓馬" など 論理型__ true(真 正しい),false(偽 間違ってる) null ___ なにも入っていない状態を表わす
変数Variables 変数は、プログラムのなかで値を保存しておくための名前を付けた入 れ物です。変数に値を入れたら、後でその変数の名前を使って値を取 り出すことができるようになります。 たとえば、 var test = 98 と書くと変数testが宣言されて数値の98が代入されます。 こうしておいて..... alert(test) を実行すると ダイアログに 98 と表示されます。 このあと、続けて test = 98 + 2 または、test = test + 2 alert(test) を実行すると ダイアログに 100 が表示されます。 さらに、JavaScriptの場合は、 いままで数値だった変数testにいきなり、 test = "文字に変えちゃうぞ" のように文字列を入れても alert(test) を実行すると ちゃんと 文字に変えちゃうぞ の文字が表示されます。 JavaScriptでは変数を宣言するときに一般のプログラムと異なり、 文字型とか整数型などの型をあらかじめ指定しておく必要がありませ ん。代入した値の型がそのまま変数の型であるといえます。 注意 : 上でみたようにJavaScriptではプログラムの途中で変数の型が 変わっても構いません(一般のプログラムは型を変えると厳しくエラー が出て怒られる^^;)。ただ、これは、お気楽ではありますが、逆に間 違って変更してしまっても気付きにくい...^^;ということがありますの で気を付けましょう。 変数名の付け方 たとえば、前の例のtestは変数名です。 変数名は頭文字が 英文字の"a"〜"z"または"A"〜"Z"または"_" で始まり それに続けて 英文字の"a"〜"z"または"A"〜"Z"または"_" または0〜9 で書かれる単語で予約語以外なら自由に付けられます。 数字で書き始められないことや日本語が使えないことと大文字小文字 が区別されることに注意してください。あとで、修正したりすること を考えてなるべくわかりやすい名前が良いわけですが、実は私は子供 の名前を付けたりしてます^^;。
参考 : 予約語一覧
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
delete
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
typeof
var
void
while
with
(予約語は関数名やオブジェクト名などにも使えません)
変数の有効範囲Variable scope スコープは変数の値をとりだせる有効範囲のことです。JavaScript では関数(function)の内側だけで使うローカル変数とスクリプト全 体のどこででも使えるグローバル変数の2つの方法があります。 関数の外で宣言すればグローバル変数になり、中でvarを使って宣言 すればローカル変数になります。
リテラルLiterals リテラルとはスクリプトの中に書かれたデータの愛称?のようなもの です。たとえば "山"は文字型リテラル、12 は整数型リテラル、true は論理型リテラルと呼びます。ところで^^;、こんな言葉を知って ることとプログラムを書けることはまったく別の事なので、当面 はなんの役にもたたないかもしれませんが、プログラム本を読む時に は思いだすと役にたつかもしれません(笑)。 整数型リテラル ______ 10,12,0xFF,-128 など 浮動少数点型リテラル__ 1.26,-2.5,-1.3E12 など 文字型リテラル ______ "川","123" など 論理型リテラル ______ true(真 正しい),false(偽 間違ってる) 特殊キャラクタ 以下の特殊記号が使えます。\nはこの本でもalert()文の中の改行に よく使用しています。
例 alert("ここで改行\nする")
\b__ バックスペース(backspace) \f__ フォームフィード(form feed) \n__ 改行(new line) \r__ キャリッジリターン(carriage return) \t__ タブ(tab) \\__ バックスラッシュ(backslash) エスケープキャラクタ ダブルクォート(")やシングルクォート(')を表示したいときには、その 前にバックスラッシュ\を付けます(\")。また、文字化けする字にも\ をかまします(表\示)。
Expressions 演算子Operators 式といえば足し算や掛け算というのが普通ですが、JavaScriptでは こういう算術式のほかに文字式とか論理式というものがあります。 計算結果が2とか3.5などの数値になるものを算術式、 "牛久大仏"などの文字列になるものを文字式、 true(真)かfalse(偽)の判断を返すものを論理式と呼び、 その式を構成する+ や - や = などを演算子と呼びます。 代入演算子Assignment operators 代入演算子は変数に値を代入するときに使います。たとえば、a = 3 などの時の = がそれです。
例 意味 x = y x に y を代入 (以下同様に右辺の結果をxに代入します) x += y x = x + y (たとえば、x+=2 は x=x+2と同じ意味です) x -= y x = x - y x *= y x = x * y x /= y x = x / y x %= y x = x % y x <<= y x = x << y x >>= y x = x >> y x >>>= y x = x >>> y x &= y x = x & y x ^= y x = x ^ y x |= y x = x | y
比較演算子Comparison operators 左右の式を比較して論理値(真trueか偽falseか)を返します。
例 意味 x == y イコール。xとyが同じならtrueを返す x ! = y ノットイコール。xとyが違えばtrueを返す x > y xがyより大きければtrueを返す x >= y xがと同じかyより大きければtrueを返す(=>ではダメ) x < y xがyより小さければtrueを返す x <= y xがと同じかyより小さければtrueを返す(=<ではダメ)
算術演算子Arithmetic operators 算術演算のための演算子です。
例 意味 x + y 足し算 x - y 引き算 x * y 掛け算 x / y 割り算 x % y 余りを求める(もし21%10なら1です) x ++ xの値を返してから1を足す ++ x 1を足してからxの値を返す x -- xの値を返してから1を引く -- x 1を引いてからxの値を返す x = -x 符号反転(xが1なら-1になります)
ビット演算子Bitwise operators 文字列を32ビットの整数とみなしてビット(2進数)単位の演算しま す。ただ、ホームページを作ろうとするときにビット演算を使うこと はめったにありません。必要になったときにコンピュータの関連資料 等で勉強してください。論理演算子と間違えないように注意しましょ う。
例 意味 a & b 論理積(AND) a | b 論理和(OR) a ^ b 排他的論理和(XOR) ~ a 反転(NOT) a << b 左シフト a >> b 右シフト a >>> b 0で埋めながら右シフト
論理演算子Logical operators 左右の式を論理演算し結果を論理値(真trueか偽false)で返します。
例 意味 x && y xとyが両方trueならtrue 違えばfalseを返す(AND) x | | y xまたはyのどちらかがtrueならtrue 違えばfalseを返す(OR) ! x xがtrueならfalse 違えばtrueを返す(NOT) false && x xにかかわらず必ずfalseを返す true | | x xにかかわらず必ずtrueを返す
文字列演算子String operators 文字列を + で結合できます。"文字"+数値とすると自動的に数値を文 字列に変換して結合します。
例 意味 "x" + "y" "xy" になる "x" += "y" "x"+"y"と同じ "xy" になる "x" + 5 "x5" になる
特別演算子Special operators
new演算子 オブジェクトのインスタンスを作ります(使える状態にします)。 object名 = new objectType ( パラメータ1 [,パラメータ2] ...[,パラメータN] ) 例 new Date(1999,1,1) typeof演算子NN3.0~/IE3.0~ オペランドのタイプを返します。 たとえば、document.write(typeof 18)を実行すると、numberの 文字が表示されます。 例 結果 typeof 11 number typeof "犬" string typeof true boolean typeof document object typeof new Date() object typeof Date function typeof tt undefined void演算子NN3.0~/IE4.0~ ハイパーテキストリンクに式を記述するのに使います。式が評価され ずに跳んでいってしまう^^;事はありません。 たとえば、 <A HREF="javascript:document.bgColor=142563">クリック</A> とすると背景色は変更されず、リンクとして評価されてしまいます。 しかし、これを <A HREF="javascript:void(document.bgColor=142563)">クリック</A> とすれば、きちんと背景色が変更されます。 なにも、反応させたくない時はvoid(0)を使います。 たとえば、<A HREF="javascript:void(0)" onClick="命令">>クリック</A> ではvoid(0)が無視されてonClickの命令が実行されます。

オブジェクトObjects プロパティproperties メソッドmethod オブジェクトは直訳すればもののことです。たとえばHTML で書いたボタン(button)はオブジェクトで、そのなかにHTMLで指定 するnameとかvalueが含まれています。このnameやvalueはボタン オブジェクトに含まれるプロパティといい、ボタンをクリックする命 令click()はメソッドといいます。また、ボタンをクリックしたときに 指定した命令を実行するonClickというイベントハンドラもこのボタ ンオブジェクトには含まれており、これらすべてをひっくるめた ボタンの仕事をするもの一式をさしてボタンオブジェクト (button object)と呼びます。また同時に、このボタンオブジェクト はそのボタンがあるformオブジェクトに含まれるプロパティでもあり ます。
たとえば、そのボタンをクリックした状態にしたいときには、 form名.button名.click() という記述だけでできるようになっています。
同様に、JavaScriptにはいくつかのオブジェクトが用意されいて、 便利に使えるようになっています。 参考 : ちなみに、formオブジェクトはその上のdocumentオブジェク トのプロパティでdocumentオブジェクトはそのまた親亀のwindow オブジェクトのプロパティですので、上の例は正確には、 window.document.form名.button名.click()と書きますが、 普通は省略します。 JavaScriptのオブジェクトとそれに含まれる プロパティ・メソッド・イベントハンドラ一覧
( Layer以外はおおむねJavaScript1.1がふくまれてい ます。IEのJScriptは異なりますが、この表のLayerを除く 範囲内で使用すれば大半は各ブラウザ共通で動作させる ことが可能です。)
ObjectPropertiesMethodsEvent handlers
Anchor
なし
なし
なし
anchors array
length
なし
なし
Applet
なし
All public methods of the applet
なし
applets array
length
なし
なし
Area
hash
host
hostname
href
pathname
port
protocol
search
target
なし
onMouseOut
onMouseOver
Array
length
prototype
join(セパレーター)
reverse()
sort(function)
なし
Button
form
name
type
value
blur()
click()
focus()
onBlur
onClick
onFocus
Checkbox
checked
defaultChecked
form
name
type
value
blur()
click()
focus()
onBlur
onClick
onFocus
Date
prototype
getDate()
getDay()
getHours()
getMinutes()
getMonth()
getSeconds()
getTime()
getTimezoneOffset()
getYear()
parse("date文字")
setDate()
setHours()
setMinutes()
setMonth()
setSeconds()
setTime()
setYear()
toGMTString()
toLocaleString()
toString()
UTC(dateValue)
valueOf()
なし
document
alinkColor
Anchor
anchors
Applet
applets
Area
bgColor
cookie
domain
embeds
fgColor
Form
forms
Image
images
layer
lastModified
linkColor
Link
links
referrer
title
URL
vlinkColor
close()
open()
write()
writeln()
なし
event
type
x
y
なし
all event handlers
FileUpload
form
name
type
value
blur()
focus()
onBlur
onChange
onFocus
Form
action
Button
Checkbox
elements
encoding
FileUpload
Hidden
length
method
name
Password
Radio
Reset
Select
Submit
target
Text
Textarea
reset()
submit()
onReset
onSubmit
forms array
length
なし
なし
Frame
frames
name
length
parent
self
window
blur()
clearInterval()
clearTimeout()
focus()
setInterval("命令",msec)
setTimeout("命令",Dly)
onBlur
onFocus
frames array
length
なし
なし
Hidden
name
type
value
なし
なし
history
current
length
next
previous
back()
forward()
go()
なし
history array
length
なし
なし
Image
border
complete
height
hspace
lowsrc
name
prototype
src
vspace
width
なし
onAbort
onError
onLoad
images array
length
なし
なし
Layer
name
left
top
pageX
pageY
zIndex
visibility
clip.left
clip.top
clip.right
clip.bottom
clip.width
clip.height
background
bgColor
siblingAbove
siblingBelow
above
below
parentLayer
src
layers
moveBy(x, y)
moveTo(x,y)
moveToAbsolute(x, y)
resizeBy(w,h)
resizeTo(w,h)
moveAbove(layer)
moveBelow(layer)
load(source,w)
onMouseOver
onMouseOut
onLoad
onFocus
onBlur
Link and Area
hash
host
hostname
href
pathname
port
protocol
search
target
なし
onClick
onMouseOut
onMouseOver
links array
length
なし
なし
location
hash
host
hostname
href
pathname
port
protocol
search
reload()
replace()
なし
Math
E
LN2
LN10
LOG2E
LOG10E
PI
SQRT1_2
SQRT2
abs(値)
acos(値)
asin(値)
atan(値)
atan2(x,y)
ceil(値)
cos(値)
exp(値)
floor(値)
log(値)
max(a,b)
min(a,b)
pow(a,power)
random()
round(値)
sin(値)
sqrt(値)
tan(値)
なし
MimeType
description
enabledPlugin
type
suffixes
なし
なし
mimeTypes array
length
なし
なし
navigator
appCodeName
appName
appVersion
mimeTypes
plugins
userAgent
javaEnabled()
taintEnabled()
なし
Number
MAX_VALUE
MIN_VALUE
NaN
NEGATIVE_INFINITY
POSITIVE_INFINITY
prototype
なし
なし
options array
length
なし
なし
options array elements
defaultSelected
index
length
selected
selectedIndex
text
value
なし
なし
Password
defaultValue
form
name
type
value
blur()
focus()
select()
onBlur
onFocus
Plugin
description
filename
length
name
なし
なし
plugins array
length
refresh()
なし
Radio
checked
defaultChecked
form
length
name
type
value
blur()
click()
focus()
onBlur
onClick
onFocus
Reset
form
name
type
value
blur()
click()
focus()
onBlur
onClick
onFocus
Select
form
length
name
options
selectedIndex
text
type
blur()
focus()
onBlur
onChange
onFocus
String
length
prototype
anchor("アンカー")
big()
blink()
bold()
charAt()
fixed()
fontcolor("色")
fontsize(1to7)
indexOf("",[i])
italics()
lastIndexOf()
link(URL)
small()
split()
strike()
sub()
substring(intA,intB)
sup()
toLowerCase()
toUpperCase()
なし
Submit
form
name
type
value
blur()
click()
focus()
onBlur
onClick
onFocus
Text
defaultValue
form
name
type
value
blur()
focus()
select()
onBlur
onChange
onFocus
onSelect
Textarea
defaultValue
form
name
type
value
blur()
focus()
select()
onBlur
onChange
onFocus
onSelect
window
closed
defaultStatus
document
Frame
frames
history
length
location
name
opener
parent
self
status
top
window
alert("メッセージ")
blur()
clearInterval()
clearTimeOut()
close()
confirm()
focus()
open()
prompt()
moveBy(x,y)
moveTo(x,y)
resizeBy(x,y)
resizeTo(w,h)
setInterval("命令",msec)
setTimeOut("命令",msec)
onBlur
onError
onFocus
onLoad
onUnload
上記の他にすべてのオブジェクトにはeval, toString, とvalueOfの
メソッドが含まれます。

ファンクション(関数)Functions ファンクションはいくつかの命令文をまとめて名前を付けたものです。 書き方は、 function ファンクション名(引数){命令文1;命令文2;命令文3...命令文n} で、このように記述されたあとは、スクリプトのなかに ファンクショ ン名(引数) を書くだけでファンクションのなかに書かれた命令文をま とめて実行することができるようになり、何度も同じ命令文を繰り返 して書かずにすむので手間が省けるうえにスクリプトがシンプルに なって見やすくなります。 たとえば、
function test(color){bgColor='red';bgColer=color} というファンクションを作っておいて test('pink') を実行すると、背景色が赤-ピンクの順に変わります。 次に test('green') を実行すると、背景色が赤-緑の順に変わります。 ちなみに、functionを定義する際の括弧の位置は、 function test() { 命令} でも、 function test() { 命令 } でも、 function test() {命令} でもかまいません。
引数配列arguments array ファンクションを使うときに引数がいくつになるかあらかじめわから ない場合には arguments arrayを利用します。これにより、実際に 渡された引数の数がわかり、何番目の引数かも指定できます。
ファンクション名.arguments[index番号] ファンクション名.arguments.length

Statements
JavaScriptのステートメント(文)になどついて

たとえば、「もし15才以下なら入場料が半額だ」という処理をスクリ
プトにやらせようとする時には次の様な書き方をします。
if(toshi<=15){kane/2}else{kane} 分解して説明すると.... if もし (toshi<=15) 年(変数toshi)が15より小さい( < )かイコール( = )なら {kane/2} 入場料(変数kane)を2で割る( /2 ) else ちがったら {kane} 入場料(変数kane)はそのまま
このif(...){...}else{...}がJavaScriptのステートメントです。条件に よって処理を分岐させたり、繰り返したりやめたりと、いろいろな文 の使い方があります。
条件文conditional statement もし、aaaならbbbして、違えばcccする。という作業をしてくれる言い回しです。
if (条件式) { 命令1 } else { 命令2 } この条件式がtrue(真)の時には命令1を実行し、false(偽)の時には命令 2を実行します。 例 if (a==1) {alert('1です')} else {alert('1じゃない')}
三項演算子conditional operator NN4.0~/IE4.0~ 条件に応じて作業を分岐するもうひとつの言い回しで、 if...else による条件文を簡単に記述するための演算子です。この演算子は、 大きい式の一部分として式に組み込んで使用するとプログラムをシンプルに することができます。
(条件式) ? 命令1 : 命令2 この条件式がtrue(真)の時には命令1を実行し、false(偽)の時には命令 2を実行します。 例 alert(( new Date().getHours() >= 12 ) ? "午後です" : "午前です" )

ループ文Loop statements ループ文はある条件になるまで指定した命令の実行を繰り返します。 Javascriptではforwhileの二つの文を使えます。 for statement
for ( 初期値の設定 ; 条件式 ; 増分式 ) { 命令 } まず初期値が設定され、条件式がtrueの間だけ増分式と命令を繰り返 します。条件式がfalseになったらループは終了します。命令文が1つ なら{}を省略できます。 例 for (i=0;i<=10;i++) {alert( i )}
while statement
while ( 条件式 ) { 命令 } 条件式がtrueの間だけ命令を繰り返します。条件式がfalseになった らループは終了します。命令文が1つなら{}を省略できます。 例 i=3 ; while ( i > 0 ) {alert( i );i--}
break statement
forやwhileのループを終了させて脱出するのに使います。 例 for (i=0;i<=10;i++) { if ( i == 6 ) break ; alert( i )} 例 i=3 ; while ( i > 0 ) { if ( i == 2 ) break ; alert( i );i--} NN4.0~/IE4.0~からbreak label名という書式でにジャンプ先を 指定できるようになりました。
continue statement
forやwhileのループを終了させず実行をスキップして次の反復へ実行 を移します。forなら次の増分式、whileなら次の条件式評価へ制御が 移ります。 例 for (i=0;i<=10;i++) { if ( i == 6 ) continue ; alert( i )} 例 i=3 ; while ( i > 0 ) { if ( i == 2 ) continue ; alert( i );i--} NN4.0~/IE4.0~からcontinue label名という書式でにジャンプ先を 指定できるようになりました。
do While statementNN4.0~/IE4.0~
do {命令} while ( 条件式 ) まず命令を実行し、条件式がtrueの間だけ命令を繰り返します。 条件式がfalseになったらループは終了します。 例 i=0 ; do { i+=1 ; alert( i ) } while ( i < 3 )
labeled statementNN4.0~/IE4.0~
label名: 命令文 breakまたはcontinueとともに使用してループ脱出後に実行する 場所を指定します。
switch statementNN4.0~/IE4.0~
switch ( expression ) { case label名1: 命令文; break; case label名2: 命令文; break; default: 命令文; } expressionに代入されたラベル名によって処理を分岐します。 例 i="山" ; switch ( i ) { case "川" : alert("かわ"); case "山" : alert("やま"); case "谷": alert("たに"); default : alert("そのた"); }

オブジェクト操作文object manipulation statements andoperators JavaScriptでオブジェクトを操作するときに使う方法です。 new演算子 new operator
オブジェクトを実際に使える状態に設定します。 例 test = new Array(3) test[0]="100点" test[1]="18点" test[2]="12点" 例 function test(a,b,c) { this.a=a this.b=b this.c=c } test1 = new test("15点","7点","6点")
this keyword
this.[プロパティ名] 現在のオブジェクトを参照するときに使います。たとえば、formの中 のonClickを押した時にそのformオブジェクトの中の他のtextエリア のデータを取り出したい場合にはthis.form.そのtextエリア名.value とします。 例 onClick="this.form.f1.value=this.form.f2.value"
for...in statement
for ( 変数 in オブジェクト) { 命令 } 指定した1つのオブジェクトのすべてのプロパティを変数として繰り 返しを行う文です。 例 for ( var i in window ) { alert( i +" = "+ window[i] +"<BR>") }
with statement
with ( オブジェクト) { 命令 } デフォルトオブジェクトを指定します。たとえば、Math.sinや Math.tanをいちいちMathを付けて何度も書くと繁雑になるよう な時に使います。でも、doncumentやwindowなどのオブジェ クトはwithを使わなくてもはじめから省略可能です。 例 with ( Math ) { a=cos(PI/2) b=sin(10) c=PI*(a+b) }


Contents
| CONTENTS
| PART1 これだけ知っていれば大丈夫
| PART2 サンプルの紹介
| PART3 JavaScript言語仕様
| PART4 JavaScriptクイック書式一覧
| PART5 JavaScriptサイト
| オンラインサポートページ(回線をつないでください)


Maintained by
tato@fureai.or.jp works1997 Toshirou Takahashi