JavaScript第5版 P21〜P74
JavaScript第5版を通読中。基本だけど忘れそうなのでメモっとく
第3章 データ型と値
データ型
- 基本データ型は3つ
- 数値(すべて浮動小数点で表現される)
- 文字列(char型とかはない)
- 論理値
オブジェクト
- 配列はオブジェクトの一種(インデックス付のオブジェクト)
- 関数はオブジェクト
その他
- null
- オブジェクト型、オブジェクトがないことを意味する
- undefined
- 未定義を意味する。null値とは同じではない
数字から文字列へ変換
必要に応じて自動的に変換される
var n = 100; var s1 = n + "yen"; // "100yen" //空文字を連結させる var s2 = n + ""; // "100" //String関数 var s3 = String(n); //"100" //toStringメソッド(呼び出すと数値がNumberオブジェクトに変換される) var s4 = n.toString(); //"100"
文字列から数値へ変換
これまた必要に応じて変換される
var n1 = "21" * "2"; // 42 //0を引く var n2 = string_value - 0; //Number()関数 //ただし、10進数で表現できない文字列の場合、「NaN」(Not a Number)を返す var n3 = Number(string_value); //perseInt関数、perseFloat関数 //数値以外のものが後続しても無視する perseInt("300yen"); // 300 perseInt("12.345"); // 12 perseFloat("12.345"); // 12.345 perseInt("hoge"); // NaN
論理値の型変換
多くは自動的に変換される
- 論理値->数値、文字列
- true -> 1, "true"
- false -> 0, "false"
- 数値->論理値
- 0|NaNでない -> true
- 0|NaN -> false
- 字列->論理値
- 空文字でない -> true
- 空文字 -> false
明示的に型変換したい場合
var b1 = Boolean(x); //論理否定演算子を2回使う var b2 = !!x;
オブジェクトから基本データ型への変換
- オブジェクトを意味のあるデータ型に変換するvalueOf()メソッド
- 数値を返すvalueOf()メソッドを持つオブジェクトは、算術演算が使える
第4章 変数
- varで必ず宣言しましょう
- varで宣言しなければ、グローバル変数になる。
変数のスコープ
- ローカル変数のスコープは定義された関数の中に限られる
- ブロックレベルのスコープはない
function foo() { // i、jともに関数foo全体で有効 for (var i = 0; i < 10; i++) { for (var j = 0; j < 10; j++) { ・・・ } } }
スコープチェーン
- 関数が呼ばれるとCallオブジェクトが生成される
- Callオブジェクトはローカル変数や仮引数の定義を保持する
- スコープチェーンとは、グローバルオブジェクトやCallオブジェクトを並べたもの
- 変数xの値を探すときは、まずスコープチェーンの先頭のオブジェクトにxというプロパティがあるか確かめる
- なければ次のオブジェクトに対して同じ操作を行う
- スコープチェーンのすべてのオブジェクトで走査し、なければundefined