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章 変数

変数のスコープ
  • ローカル変数のスコープは定義された関数の中に限られる
  • ブロックレベルのスコープはない
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

第5章 式と演算子

論理和演算子(||)
  • 左側の式を評価しtrueに変換できる場合は、左の式の値をそのまま返す。
  • だから次のような使い方が可能。
// max_widthが定義されていればmax_width、されていなければ500をxに代入
var x = max_width || 500;