DATE : 2006/07/03 (Mon)
算術演算
C や Java などと同じように、JavaScript には以下の算術演算子があります。
- +(加算)
- -(減算)
- *(乗算)
- /(除算)
- %(剰余)
上の演算子は、結果を Number 型で返します。
また、指定の Number 型の数を1増減させる演算子もあります。
- ++
- --
前置と後置、両方ともできます。
a++;
++a;
関係演算
- <
- >
- <=
- >=
この演算子は、値の型を同じになるように変換した上で演算を行います。
例えば、以下のように、String 型と Number 型との比較の場合は、 Number 型に型変換された上で比較が行われます。String 型も比較できますが、ここでは省略します。
"2" > 1 === true
この演算子は、Boolean 型の値を返します。ただし、片方が NaN の場合は、undefined を返します。
等価演算
- ==(等価)
- !=(不等価)
上記の式は、型を変換した上で、値が等しいかどうかを判断します。
また、String 型では、両方の文字列の内容が等しいかどうかを判断できます。
("abc" == "abc") === true
(23 == "23") === true
また、型を変換せずに、比較する演算子もあります。
- ===(等価)
- !==(不等価)
この場合、型が異なれば違った値として判断されます。
(23 === "23") === false
ただし、String 型同士の比較の場合、オブジェクトが異なれば、違った値として判断されます。
("abc" == new String("abc") ) === true
("abc" === new String("abc") ) === false
上のコードでは、「new String("abc")」によって、新たな String オブジェクトを生成しています。
ビット演算子
- &(AND)
- |(OR)
- ^(XOR)
- ~(前置、NOT)
- <<(左シフト)
- >>(算術右シフト)
- >>>(論理右シフト)
結果は、32ビットの符号付整数になります。
論理演算子
- &&(AND)
- ||(OR)
- !(前置、NOT)
両方の値を Boolean 型に変換して演算します。
代入演算子
- =
- *=
- /=
- %=
- +=
- -=
- <<=
- >>=
- >>>=
- &=
- ^=
- |=
文字列演算
以下の演算子を使用すると、文字列の結合が行えます。
- +
- +=
その他
typeof 演算子を使うと、値の種類を文字列として取得できます。
typeof 3 === "number"
typeof "abc&qupt; === "string"
値と取得できる文字列との対応は、次の通りです。
値 | 取得できる文字列 |
---|---|
Undefined 型 | undefined |
Null 型 | object |
Boolean 型 | boolean |
Number 型 | number |
String 型 | string |
Object 型(非関数) | object |
Object 型(関数) | function |
Object 型(ECMAScript で定義されていないもの) | (実装によって異なる) |
この他にも、条件演算子、カンマ演算子がサポートされています。
オブジェクト関係の演算子は、ここでは省略します。
DATE : 2006/07/02 (Sun)
JavaScript のデータ型
JavaScript には、以下のデータ型があります。
- String 型
文字列を表す型です。以下のように、「"」や「'」で囲むことで 文字列を生成できます。
var s = "string"
ちなみに、1つの文字は符号なし16ビット整数で表されます。
文字エンコーディングは UTF-16 です。
初めの文字から、0, 1, 2, ... とインデックスが割り振られます。
- Number 型
数値を表す型です。
64ビットの浮動小数点数(IEEE 754)で表されます。
表現できる値の範囲は、±2の56乗です。
整数と浮動小数点の区別はされません。
演算の結果、数値で表現できなくなった場合の値として「NaN」値があります。NaN 値は通常、比較できません。NaN 値どうかを確かめるには、isNaN 関数を使用します。
- Boolean 型
真偽値を表す型です。
「true」または「false」の値をとります。前者が真、後者が偽です。
- Object 型
オブジェクトを表す型です。オブジェクトは、プロパティの組から成っています。
- Undefined 型
undefined を表す型です。未初期化の変数には、 undefined が格納されています。
- Null 型
null を表す型です。
この他にも、ECMAScript の仕様には Reference 型や List 型、Completion 型があります。ただし、これらの型は式の中間評価でのみ用いられ、変数には格納できないデータ型なので、ここでは省略します。
ちなみに、JavaScript の変数はどのような型でも受け付けます。つまり、上記で示した型の値を、自由に変数へ代入することができます。
var a;
a = 1;
a = "abc"
a = false;
a = null;
型変換
JavaScript では、演算子など、場合に応じてデータ型を自動的に変換します。
例えば、次のコードでは、String 型と Number 型を減算していますが、正しく計算が行われます。
4 - "4"
しかし、場合によっては、型を手動で変換しておきたい場合もあります。
例えば、「+」演算子は、数の加算だけでなく、文字列の結合も行います。そのため、データ型によって動作が異なってしまいます。
次のコードは Number 型同士の加算のため7という結果になります。
3 + 4
しかし、どちらかの項が String 型の場合は、文字列の結合が行われてしまいます。
3 + "4"
結果は、「34」となります。
上の例を、数として計算にするには、String 型を Number 型に変換しなければなりません。
変換を行うには、以下のようにします。
3 + Number("4")
型変換の概要を以下に示します。
なお、例のコード中に出てくる「===」は、両端のデータ型が同じで、かつ値も等しいことを示します。
- String 型への変換
そのデータを表現する文字列に変換します。例えば、Null 型は「"null"」になりますし、「34」や「false」は「"34"」や「"false"」になります。
例:
String(4) === "4"
String(true) === "true"
String(null) === "null"
String(undefined) === "undefined"- Number 型への変換
String 型の場合、数字と判断できる場合はその数字に、数字と判断できない場合は NaN になります。(具体的なルールは、省略します)
Undefined 型は NaN 、Null 型は0になります。
そして、Boolean 型は、true が1、false が0になります。
例:
String("45") === 45
isNaN( String("number") ) === true
String("true") === 1
String("false") === 0
String(null) === 0
isNaN( String(undefined) ) === trueここで出てくる isNaN 関数は、引数の値が NaN かどうかを調べる関数です。
- Boolean 型への変換
Number 型の場合、0は false 、それ以外は true になります。
Undefined 型、Null 型はともに false になります。
String 型の場合、文字列の長さが0の場合のみ false となります。それ以外は全て true です。つまり、Boolean 型を String 型に変換した値を再び Boolean 型に変換しようとしても、true になります。
例:
Boolean(0) === false
Boolean(1) === true
Boolean(-1) === true
Boolean("") === false
Boolean("false") === true
Boolean(undefined) === false
Boolean(null) === false
DATE : 2006/07/02 (Sun)
変数の宣言
何はともあれ、変数の宣言からです。
まずは、変数「a」を宣言するコードです。
var a;
「var」を変数名の前に付けることで、変数を宣言できます。
以下のように、宣言と同時に初期化しておくことも可能です。
var a = 1;
複数の変数を同時に宣言することもできます。
var a, b, c;
ちなみに、初期化されていない変数は undefined 値を持ちます。
以下のようにすると、変数が初期化されているかどうかをチェックできます。
(変数 a は宣言済み)
a != undefined;
変数が初期化されている場合、上記の式は true を返します。
なお、変数名の先頭には、英字のほかに、「$」や「_」が使用できます。
関数の宣言
関数の宣言は、次の通りです。
function func() {
document.write("hello");
}
以下のように関数「func」を実行すると、「hello」という文字列がブラウザに出力されます。
func();
function func() {
document.write("hello");
}
なお、次のように宣言することもできます。
func = function() {
document.write("hello");
}
JavaScript では、関数は Function オブジェクトとして扱われます。つまり、「func」と言うのは、上の例で言えば、「document.write.("hello")」を実行する関数を格納した変数と言えます。
実際、関数を別の変数に渡すこともできます。
func = function() {
document.write("hello");
}
func2 = func;
これは、「function func() {...}」と宣言しても、「func = function() {...}」と宣言しても同じです。
ちなみに、引数は以下のように指定します。
function func(a) {
(省略)
}
function func(a, b) {
(省略)
}
変数の有効範囲
関数内で変数を宣言すると、関数内の範囲で有効になります。つまり、ブロック内で変数を宣言した場合でも、ブロックのある関数内であれば、ブロック外から変数にアクセスできます。
function func() {
if (a < 0) {
var b = 0;
}
(if 文のブロック外から変数 b にアクセス可能)
}
また、実行コンテキスト(スクリプトが初めに実行される部分)でも、ブロック内で宣言した変数はブロック外からもアクセスできます。
if (a < 0) {
var b = 0;
}
(if 文のブロック外から変数 b にアクセス可能)
DATE : 2006/07/02 (Sun)
諸事情で、今はやりの Ajax に手を出すことになりそうです。
ただ、Ajax の中核とも言える JavaScript の知識が全然ないんですよね(´・ω・`)
(;´Д`)Google で JavaScript を検索しても、出てくるのはかつて JavaScript がもてはやされていた時期の、ウェブページに装飾を付けるサンプル集がほとんどですし。
文法は Java に若干似ているとはいえ、全くの別の言語ですから、JavaScript 独自の記法も結構ありそうです。
(;´∀`)一応、 JavaScript の根底とも言える ECMAScript の仕様書はあるのですが、スクリプトの環境を実装者する開発者向けの要素を含んでいるために読み解くのが難しいんですよね。
(`・ω・´)そこで、このブログに JavaScript の記法を少しずつメモしていきたいと思います。
(;´Д`)まあ、少し前にネット界隈ではやっていた勉強日記の真似事ですけどね
ちなみに、 Java 6 では、スクリプト言語がサポートされるようになります。つまり、スクリプト言語から Java のライブラリを参照したり、 Java からスクリプトを呼び出したりできるようになるわけです。
サポートされるスクリプトの中には、JavaScript も含まれています。なので、いま勉強しておいても損はなさそうですね( ´∀`)
なお、メモする JavaScript は、ECMA-262 3rd Edition を基本とします。
DATE : 2006/07/01 (Sat)
GyaO で「MUSASHI -GUN道-」の第7話が配信されていたので見てみました。
(;´Д`)とうとう、主人公の顔が崩れ出し始めました。
これまでは、時々おかしなことになるものの、キャラクターの顔はそれなりに安定して描かれていました(もっとも、MUSASHI 基準ですが)。
しかし、とうとうワンカットごとに主人公の顔が違うという事態に突入してしまいました(;´Д`)。
(;^ω^)それにしても、主人公以外のキャラクターは、それなりに安定していたのが不思議です。
具体的な崩れ具合は、「7話見所紹介」の下の方にある「※7話まとめ」の項目をご覧ください。ちなみに、1カットごとに崩れているので、実際にはさらに多くのバリエーションが存在します。
ところで、BS-i の本放送では、明日が第13話です。1クールの終わりに当たる話なので、下手をすると、明日で MUSASHI は終わりかもしれません。゚(゚´Д`゚)゚。(MUSASHI は全26話の2クール予定です)。
なにしろ、第12話で予告編とも EPG とも異なる内容(普通の内容だったはずが、総集編)を放送してしまいましたからね……(;^ω^)。
まとめサイトにもあるとおり、まさに放送事故レベルです。
( ゚д゚)ハッ! 「MUSASHI -GUN道-」は、「放送事故」という概念を初めて取り入れたアニメーションではなかろうか。
ということはさておき、今後も「MUSASHI -GUN道-」の継続を願って、今日は寝ることにします。