AppWorks School Batch #16 Front-End Class 學習筆記&心得(Week 2)
(本文所有內容禁止媒體引用)
本週正式進入「程式語言」環節,開始學習 JavaScript,從最基本的變數、條件判斷、陣列、迴圈,到進階的物件、文件物件模型(document object model, DOM)操作等,之前花了數個月才逐漸上手的內容,這次一週內就要搞定。
進度安排
第二週的進度全部圍著 JavaScript 打轉,在報名前,School 就提供了 Udacity 的免費課程讓大家預習,內容涵蓋基本資料型別、變數、條件判斷、迴圈、函數、陣列與物件,如果申請前就把 Udacity 的課程內容都摸熟,這星期的學習內容理應不是太大的負擔,比較特別的是「文件物件模型(document object model, DOM)」與「事件(event)」的操作,這些概念比較抽象且複雜,需要更多時間適應。
本週所有課程都以 Treehouse 進行,內容與發音依舊是全英文,有同學在群組說感覺練了很多英文,真的是一點也沒錯,不過軟體開發相關資源確實是以英文為主,不管是 Stack Overflow、GeeksforGeeks、Codecademy、甚至是 YouTube等,練就「以英文學習」的本事可說是基本功。
JavaScript 重點
- 與 HTML 連接:
<script>
。 - 程式碼撰寫原則:DRY (Don’t Repeat Yourself)。
- 命名規則(naming conventions)。
- 真值(truthy value):非虛值者些屬之。
- 虛值(falsy value):
0
、-0
、0n
、""/''/``
、null
、undefined
、NaN
。 - 布林值:
true
、false
。 - 關鍵字:
this
。 - 事件(event)。
- 無障礙:ARIA live regions。
變數
- 宣告(declaration)、賦值(assignment)。
- ES5 以前:
var
。 - ES6 起:
let
、const
。 - 作用域(scope):全域作用域(global scope)、區域作用域(local scope)。
字串
- 屬性:
.length
。 - 方法:
.toUpperCase()
、.toLowerCase()
。 - 串接(concatenation)、樣板字面值(template literals)。
運算
- 遞增:
++
。 - 遞減:
--
。 - 一元運算子:
!
。 - 算數運算子:
+
。 - 賦值運算子:
+=
。 - 相等運算子:
==
(小記:0 == “”
)、===
。 - 邏輯運算子:
&&
、||
。
條件判斷
- 語法:
if...else
、else if
。
陣列
- 陣列字面值(array literals)。
- 二維陣列。
- 索引值。
- 屬性:
.length
。 - 方法:
.push()
、.unshift()
、.pop()
、.shift()
、.join()
、.includes()
、.indexOf()
。 - 展開運算子:
...
。 - 觀念:佇列/隊列(queue)~先進先出(first in, first out, FIFO)。
疊代(迴圈)
- 類別:
do...while
、while
(當心「無窮迴圈」)、for
。 - 終止運行:
return
、break
。 - 在陣列中遍歷資料:
for...in
、for...of
。
函式
- 定義(define)函式、呼叫(call)函式。
- 參數(parameter)、引數(argument)。
- 預設參數(default parameter)。
- 一級函式(first-class function)。
- 函式宣告(function declaration)、函式運算(function expression)、箭頭函式運算式(arrow function expression)。
- 提升(hoist)。
- 錯誤處理:
throw
、Error
。 - 數學相關:
Math.max()
、Math.min()
。 - 判斷是否為
NaN
:isNaN()
。
物件
- 物件字面值(object literal)、建構子(constructor)& 類別(class)。
- 屬性訪問器:點號表示法(dot notation)、方括號表示法(bracket notation)。
- 取得屬性:getter (
get
)、更改屬性:setter (set
)。 - 正規表達式(regular expressions)。
- 在物件內遍歷資料:
for...in
。 - 展開運算子:
...
。 - 屬性:
.length
。 - 方法:
.keys()
、.values()
。
視窗物件(Window Object)
- 屬性:
window.location
。 - 方法:
alert()
、console.log()
、prompt()
。
元素物件(Element Object)
- 介面:
HTMLCollection
、HTMLDataElement
、Node
、CSSStyleDeclaration
。 - 介面屬性:
HTMLCollection.length
、HTMLDataElement.value
、Node.textContent
。 - 屬性:
Element.innerHTML
。 - 方法:
document.write()
、document.getElementById()
、document.getElementsByTagName()
、document.getElementsByClassName()
、document.querySelector()
、document.querySelectorAll()
、Element.remove()
、Element.removeAttribute()
、Element.append()
、Element.prepend()
、EventTarget.addEventListener()
、document.createElement()
、Element.insertAdjacentHTML()
(搭配'beforebegin'
、'afterbegin'
、'beforeend'
、'afterend'
)。 - 改變 CSS 屬性:
HTMLElement.style
。
心得
打從第一週看到進度安排是學完 HTML、CSS 與版本控制,就知道開學後的生活將會十分緊湊,第二週依舊延續這樣的步調,一個星期內就要從「認識 JavaScript」學到物件操作,甚至還有「文件物件模型(document object model, DOM)」與「事件(event)」,這些內容我之前摸了快兩個月還是一頭霧水,但神奇的是,這次再看居然就看懂了,之前看示範影片看得滿頭問號的 DOM 經典專題「待辦清單(Todo List)」,現在要做出來基本上是沒有什麼問題。
JavaScript 的許多進階觀念尚未包含在本週課程內容,例如執行環境(execution context)、範圍鏈(scope chain)、調用棧(call stack)、原型(prototype)、繼承(inheritance)等收錄於「JavaScript 全攻略:克服 JS 的奇怪部分」的內容,但光要熟練 DOM 本身就已經需要下一些功夫,且搭配 CSS 已足以做出反饋感頗高的頁面,把這些基本功練熟,相信未來要操作框架會更容易上手,且可避免自己被侷限於使用特定框架。
下個星期的進度是 Node.js、Express.js 與 AJAX,雖是前端班,但也會開始接觸一些後端概念,操作多會以終端機(terminal)進行、而非純用瀏覽器,因此會更為抽象,不再像前端操作可以有像完成一件美術作品時的成就感,但沒有後端功能的網站就相當於只有用餐區而沒有廚房的餐廳,因此還是要好好學,這些也是我在入學前較少接觸的內容,希望能趕緊把基本功補齊。