物件、變數與型別
JavaScript 物件可以指派給一個變數並會在執行時期擁有型別
執行時期
根物件
練習
出現過幾個記憶體物件 ?
出現過幾個變數 ?
出現過幾種型別 ?
開發時期
打程式的時候
物件
記憶體中的硬體資料
先執行先存在記憶體
當沒有人指向它,就立刻回收它
變數
儲存東西的
再assign位置給變數
var 變數 只能var 一次,第二次就會忽略
不能被刪除除非重新整理頁面
一定要宣告,不然會是window的屬性
undefined
存取不存在的屬性
error not defined
存取不存在的變數
10
變數沒有型別轉換、沒有傳值
他只是重新指標新的/不同型別的物件、傳位址
call by value reference
指向值的參考
和傳參考/傳值不一樣 變數裡不會有值
屬性
名稱
一定是字串
值
指標
跟變數一樣
可以被刪除
雜湊陣列
Javascript物件導向基礎
不建議用物件導向寫javascript
javascript不需要藍圖就可以建
var obj = {}
繼承
不要隨便亂加,因為每一個繼承上層物件的物件都會繼承
hasOwnProperty
繼承來的會returnfalse
instanceof
例如在建構式裡檢查this是屬於誰?
new
如果沒有new的話,建構式裡的this會指向window
解決
用apply
call
型別
動態型別語言
弱型別語言
不同的型別帶來不同的方法 function
執行要在後面加()
真正有型別的是物件本身
而不是變數有型別
物件型別
可以自由擴增屬性
判斷屬性是否存在?
所有東西都是物件型別
除了原始型別
物件
建立物件
用實字表示法
多國語系網站
建議重頭到尾都用GMT
正則表達式
轉換身分證字號等等
節省效能
函式
return
一級作用域
scope
var的重要性
function劃分範圍
IIFE 立即涵式
常見的design pattern
要改掉用全域變數的習慣
hoisting
javascript會自動將為宣告的變數提升
教訓:千萬不要想到哪var到哪
自己hoisting, 免得後續維護有人插在前面用變數
function下就先var
for迴圈也自己hoisting
閉包
外層宣告變數可以在內層使用
使用閉包的MyFunc function的design pattern就是閉包
why
閉包提供一種封裝
將區域變數存取起來
外面的人取用不到
也不會污染全域變數
原始型別
數值
字串
布林值
falsy 除了以下,其他都是truethy
0
''
false
null
盡量不要用
typeof null // 'object'
作者說當初是bug
但後來寫進規格
== null
undefined
ie8
undefined = window.undefined2
NAN
盡量不要用
typeof NAN // Number
isNAN
任何兩個物件型別(非原始型別)相比,永遠是false
跟任何東西比都是false 只能跟自己比
跟任何東西包括自己比都是false
isNAN
window.isNAN
== / !=
隱含型別
會引發自動轉型
=== / !==
明確比對
null
undefined
tools & reference
emoji
javascript 混淆器
about:blank