2014年7月31日 星期四

你所不知道的 JS

開發時期:
  1. 撰寫 Javascrip 的時候
  2. 無法宣告型別
執行時期:
  1. Javascrip 在瀏覽器上運行的時候
  2. 會檢查型別
廣義物件:
  1. 所有東西都是物件(廣義)
  2. 物件是存放在記憶體中的資料
  3. 存在於執行時期
狹義物件:
  1. JavaScript 是由 Object 所組成。Array 是物件、Function 是物件、Objects 是物件。
  2. 在 JavaScript 的原生資料型態 (Primitive Data Type) 中,只有下列五種類型的「值」(value) 不被視為物件:
    1. Numbers 數值
    2. Strings 字串值
    3. Booleans 布林值
    4. null 空值
    5. undefined 未定義值
  3. 其它的所有東西,都算是物件的一種
物件:
  1. 物件只能靠變數屬性取用
  2. 物件是個容器,海納百川 有容乃大
  3. 物件是個雜湊陣列(HashMap)
  4. 物件只包含屬性 (Property) 方法 (Method or Function)
  5. 可以直接取得值的稱作屬性,可以執行的稱作方法
    1. var name = obj.name;
    2. obj.laughOutLoud();
型別:
  1. 分為原始型別物件型別
  2. 原始型別 number string boolean 有其對應的 原始型別包裹 Number String Boolean
  3. 不建議直接使用原始型別包裹
變數
  1. Javascrip 是動態語言 不需編譯就能執行
  2. 宣告變數用 var
  3. 全域變數區域變數兩種
  4. 除非有其非常必要性,否則盡量避免使用全域變數,避免互相影響跟衝突
  5. 建立變數的時候會同時建立屬性變數
    1. 在全域的時候會在根物件建立屬性,這會使得任何地方都能夠過跟物件的該屬性作存取
    2. 在區域的時候會在內部物件建立屬性,內部物件是個隱形人,你看不到也摸不到他,但是他確實存在
  6. 區域變數的作用域只以 function 區隔與一般 if for while 大括號範圍無關,故一個 function 內的所有變數都可能會互相影響跟衝突
  7. 要避免一個 function 內的變數互相影響跟衝突,除了注意命名之外,拆解成數個 function 會是較佳的做法
  8. 開發時期可以在任何位置使用 var 宣告變數,但是這些變數會在執行時期自動宣告在 function 內的頂端,他只會將變數名稱的宣告置頂(其值為 undefined),賦值的位置仍不變,這種特性稱為 Hoisting,這也是為何 function 內的變數不受大括號範圍影響的原因
  9. 小道消息指出,大多數人甚至開發 Javascrip 數十年的開發人員,都鮮少有人知道 Hoisting