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