メモ
http://d.hatena.ne.jp/mindcat/20091004/1254653934
を読んでのメモ。あとでサイ本みながら復習する。
メモ
- true, false, nullはリテラル、undefined, NaN, Infinityは単なるグローバル変数。変数には代入できる(!)
- 代入して値を変更しても、一応元の値を作る方法はある
- 数値は64bit倍精度の浮動小数表現を用いています
- switch文は任意の式を記述できる。その式を実行した結果の値とswitchで指定した値がStrictEquals(===)のときcase本体が実行される
- 多重ループの内側から一気に外に出るにはラベルを使う。ラベルにはブロックがつけられる
- "FirefoxのJavaScriptでは"catchを複数記述することができます
- null instnaceof Objectはfalseだけど typeof nullだとobject
- ユーザ定義関数に対して new すると、その関数の戻り値がオブジェクトの場合、newの結果はそのオブジェクトになります。これを使うとArrayのようにコンストラクタと関数コールが同じ挙動を示すようなものを作れる。
- JavaScriptのvoidは結果をundefinedにするというオペレータです。
- varで宣言したグローバル変数は削除できませんが、宣言しないグローバル変数は deleteで削除できます。より正確にはグローバルオブジェクトからその変数名を文字列としてもつプロパティを削除します。
- つまりvar宣言しないグローバル変数はグローバルオブジェクトのプロパティになって、deleteはプロパティを削除する関数ってことね
- isFinite(x)
- xがNaN, Infinity, -Infinity以外のときにtrue
v.fun() という形式は、vに対してToObjectという型変換を実行した後に、funプロパティを探索して、その値を関数として実行するという意味を持ちます。このとき、thisにはToObjectした値がバインドされます。したがって、数値や文字列などの基本型に対してもオブジェクトに対するメソッドコールと同等の記述ができるわけです
関数に制御が移ったとき、プログラムからは参照することができないActivationObjectと呼ばれる仮想的なオブジェクトが生成されます。意味的には関数のローカル変数は、このActivationObjectのプロパティなのです。ActivationObjectは関数に対して1つですので、ローカル変数のスコープも関数の中全体のスコープになります。
初期値のないvar宣言は、その時点でその変数が定義されていなければ定義し、既に定義されていれば何もしない(undefinedで初期化はしない)という動作になります。