HTML5プロフェッショナル認定試験Level.2 覚えるべきことまとめ <オブジェクトとイベント>

[前回](http://qiita.com/aikumi/items/bcd480f10e34a2db705d)に引き続き、HTML5プロフェッショナル認定試験Level2のまとめです！

# グローバルオブジェクト

* グローバルオブジェクト
    * グローバルオブジェクトはグローバルスコープを持つオブジェクト
    * ブラウザがwindowを読み込む時に自動的に生成されるのでインスタンス化不要
    * 関数、プロパティ参照時にインスタンス名の記述が不要
    * 代表的なグローバルオブジェクト
        * Array: 配列オブジェクト
        * Boolean: 真偽値オブジェクト
        * Date: Dateオブジェクト
        * Error: Errorオブジェクト
        * JSON: JSONオブジェクト
        * Math: Mathオブジェクト
        * Number: Numberオブジェクト
        * Object: オブジェクト
        * RegExp: 正規表現オブジェクト
        * String: 文字列オブジェクト

## グローバル関数

* グローバル関数
    * グローバルオブジェクトに含まれる関数
    * 関数を含むオブジェクトのインスタンス化不要
    * 関数、プロパティ参照時にインスタンス名の記述が不要
    * グローバル関数
        * decodeURI(): URIをデコード ※
        * decodeURIComponent(): URIの要素をデコード ※
        * encodeURI: URIをエンコード ※
        * encodeURIComponent(): URIの要素をエンコード ※
        * escape(): 文字列を16進数文字列に変換
        * eval(): 文字列を評価(演算)
        * isFinite(): 有限か否かを判定
        * isNaN(): NaN(非数値)かどうかを判定
        * parseFloat(): 文字列を浮動小数点に変換
        * parseInt(): 文字列を整数に変換
        * unescape(): 16進数文字列を文字列に変換

※ エンコード対象外文字
処理系によってはこれらの文字もエンコードする。その時にencode(decode)URIComponentを使う

```js:例
var url = "http://foo.bar?str=";
var search = "単語1+単語2";
var uri1 = url + search;
var uriEncoded1 = encodeURI(uri1);
var uriEncoded2 = url + encodeURIComponent(search);
console.log(uri1); // http://foo.bar?str=単語1+単語2
// 「+」がエンコードされない (URIで意味がある文字はエンコードされない)
console.log(uriEncoded1); // http://foo.bar?str=%E5%8D%98%E8%AA%9E1+%E5%8D%98%E8%AA%9E2
// 「+」もエンコードされる
console.log(uriEncoded2); // http://foo.bar?str=%E5%8D%98%E8%AA%9E1%2B%E5%8D%98%E8%AA%9E2
console.log(decodeURI(uriEncoded1)); // http://foo.bar?str=単語1+単語2
```



* 予約文字
    * ;,/?:@&=+$
* エンコード対象外
    * アルファベット, 数字, -_.!~*'()
* スコア記号
    * #

* Mathオブジェクト
    * 数値演算に関する関数と定数を保持するオブジェクト
    * プロパティ
        * E: 自然対数の底(ネイピア定数)
        * LN2: 2の自然対数
        * LN10: 10の自然対数
        * LOG2E: 2を底としたEの対数
        * LOG10E: 10を底としたEの対数
        * PI: 円周率
        * SQRT1_2: 1/2の平方根
        * SQRT2: 2の平方根
    * メソッド
        * abs(): 絶対値を返す
        
         ```js:例
console.log(Math.abs(-123)); //結果: 123
console.log(Math.abs(123)); //結果: 123
         ```
        * cos(): コサイン(余弦)
        * acos(): アークコサイン(逆余弦)単位はラジアン
        
         ```js:例
console.log(Math.cos(60/180*Math.PI)); //結果: 0.5度
console.log(Math.acos(0.5)*180/Math.PI); //結果: 60度
         ```
        * sin(): サイン(正弦)
        * asin(): アークサイン(逆正弦)単位はラジアン
                
         ```js:例
console.log(Math.sin(30/180*Math.PI)); //結果: 0.5度
console.log(Math.asin(0.5)*180/Math.PI); //結果: 30度

         ```
        
        * tan(): 正弦
        * atan(): アークタンジェント(逆正接)単位はラジアン
        * atan2(): 引数の比を使ったアークタンジェント 単位はラジアン
                
         ```js:例
console.log(Math.tan(45/180*Math.PI)); //結果: 1 (45度)
console.log(Math.atan(1)*180/Math.PI); //結果: 45度
console.log(Math.atan2(1,Math.sqrt(3))*180/Math.PI); //結果: 30度 (座標(sqrt(3),1)は30度)
         ```
        * ceil(): 引き数より多く最小の整数値
                
         ```js:例
console.log(Math.ceil(3.1)); //結果: 4
console.log(Math.ceil(-3.1)); //結果: -3
         ```
        
        * exp(): 自然対数の底のべき乗
                
         ```js:例
console.log(Math.log(Math.exp(2))); //結果: 2

         ```
        * floor(): 引数より小さい最大の整数値
                
         ```js:例
console.log(Math.floor(3.1)); //結果: 3
console.log(Math.floor(-3.1)); //結果: -4
         ```
        * imul(): 32bit整数乗算
                
         ```js:例
console.log(Math.imul(10,10)); //結果: 100
console.log(Math.imul(0x80000000,1)); //結果: -2147483648
         ```
        * log(): 自然対数
        * max(): 引数で最大の値
        * min(): 引数で最小の値
        * pow(): べき乗

        
         ```js:例
console.log(Math.pow(2,3)); //結果: 8
console.log(Math.pow(2,-3)); //結果: 0.125
         ```
        * random(): 乱数
                
         ```js:例
console.log(Math.random()); //結果: 0.25154635930698444
         ```
        * round(): 四捨五入
                
         ```js:例
console.log(Math.round(1.4)); //結果: 1
console.log(Math.round(1.5)); //結果: 2
console.log(Math.round(-1.4)); //結果: -1
console.log(Math.round(-1.5)); //結果: -1 (負の場合は切り捨て)
         ```

        * sqrt(): 平方根


# イベント

* イベントの種類 
    * windowイベント
        * onafterprint: 印刷直後
        * onbeforeprint: 印刷直前
        * onbeforeunload: web遷移直前
        * onblur: フォーカス外れた
        * onerror: JavaScriptエラー発生
        * onfocus: フォーカスされた
        * onhashchange: URLのハッシュ(#以降)が変更
        * onload: webページ読み込み完了(キャッシュの場合は対象外)
        * onmessage: メッセージを受信
        * onoffline: ネットワーク環境がオンラインからオフラインに変更
        * ononline: ネットワーク環境がオンラインからオンラインに変更
        * onpagehide: 他のページ遷移などで元のページが隠れた
        * onpageshow: webページ読み込み完了(キャッシュの場合も対象)
        * onpopstate: 戻る、進むボタンでURL履歴(state)から履歴が取り出された
        * onredo: やり直す(redo)ボタンが押された
        * onresize: ウィンドウのサイズが変更された
        * onstorage: ローカルストレージもしくはセッションストレージが変更された
        * onundo: やり直す(undo)ボタンが押された
        * onunload: 他のページに移動した(キャッシュの場合は対象外)

 
    * フォームイベント
        * onblur: フォーカスが外れた
        * onchange: 変更された
        * onfocus: フォーカスされた
        * onformchange: フォームの値が変更された
        * onforminput: フォームの値が入力された
        * oninput: テキスト要素に入力された
        * oninvalid: 要素の無効な値が入力された
        * onselect: 要素が選択された
        * onsubmit: 送信(submit)ボタンが押された


    * キーボードイベント
        * onkeydown: キーが押された  
        * onkeypress: キーが押された離された
        * onkeyup: キーが離された


    * マウスイベント
        * onclick: ボタンがクリックされた
        * oncontextmenu: マウスの右ボタンが押された
        * ondblclick: ボタンがダブルクリックされた
        * ondrag: ドラッグされた
        * ondragend: ドラッグが終わった
        * ondragenter: ドロップ目標にドラッグされた
        * ondragleave: ドロップ目標からドラッグが外れた
        * ondragover: ドロップ目標上にドラッグされている
        * ondragstart: ドラッグが開始された
        * ondrop: ドロップ目標にドラッグがドロップされた
        * onmousedown: ボタンが押された
        * onmousemove: マウスポインタが移動された
        * onmouseout: マウスポインタが要素から外れた
        * onmouseover: マウスポインタが要素上に入った 
        * onmouseup: ボタンを離した
        * onmousewheel: マウスホイールを回転させた
        * onscroll: スクロールバーを操作した

    * タッチイベント
        * touchstart: 指が置かれた
        * touchmove: 指がドラッグされた
        * touchend: 指が離れた


# その他

* ガーベージコレクション
    * 不要となったメモリの領域を自動的に解放する処理
    * **他のオブジェクトから参照されなくなった場合**に対象となる
    * 0が代入されても不要とは判断されない
    * **実行タイミング** は一般的にヒープ領域の使用領域が一定の割合を超えた場合