iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
0
自我挑戰組

你為什麼不問問神奇 JavaScript 呢?系列 第 2

Day2 - 程式設計簡介

這篇是包含 JavaScript,所有的程式語言的名詞介紹(英翻中)。
可以檢視一下自己是否知道這些關鍵字喔!

這個章節裡面 Tony 覺得最重要的概念是 “自己試試看”。

  • 打開你慣用的瀏覽器。
  • 按下右鍵
  • 進入檢查。
  • 在上面的 console 裡面,盡情測試。

不管是書上的,或是你想解惑的,直接測試會有更直接的體驗。


先列出作者覺得必須把握的部分。

程式設計的學習沒必要是複雜且令人無法承擔的過程。你只需要熟悉少數幾個基本概念就行了

運算子 ( operators )、值與型別 ( values and types )、變數 ( variables )、條件式 ( conditionals )、迴圈 ( loops )、函式 ( functions )。

(他是個玩積木的過程。元件、桌腳、桌子、佈置房子、蓋房子)

程式碼

一個程式 (program),常稱為原始碼 ( source code ),或簡稱程式 ( code )。是特殊指令,用來告訴電腦要執行的任務。

一般來說儲存在文件檔(txt),但JS還可以在瀏覽器上使用(developr console)。

特定的規範和組合的規則,被稱為程式語言(computer language),或是語法(syntax)

述句(statement)

a = b * 2;

a 和 b 是 變數(variable)。
2 是純值(literal value)。
= 和 * 是運算子 (operators)。

以上合再一起,就是述句(statement)。大多數的述句,都會放一個分號。

運算式(expressions)

『某個變數或值,或以運算子結合起來的一組變數或值』的參考。

以同個的例子來說

a = b * 2;
  • b 是 變數運算式(variablr expression)
    (某個變數)
  • 2 是 字面值運算式(literal value expression)
    (或值)
  • a = b * 2是指定運算式(assignment expression)
    (或以運算子結合起來的一組變數)
  • b*2 是 算術運算式(artithmetic expression)
    (或值)

b*2也被稱為述句運算式(statement expression)
(就是計算機,不常見也沒什麼用。不會把結果存下來再進一步處理。)

較常見的是呼叫運算式(call expression)

alert(a);

執行一個程式

程式必須要被執行(executed)。run the program。
a = b * 2述句,電腦絕對看不懂。

會經過 直譯器(interpreter)或編譯器(compiler),變成電腦懂的語言。

  • 直譯器 - 執行程式時,從上到下,逐行執行。
  • 編譯器 - 先編譯好,執行程式時,跑編譯後的。

JavaScipt 是直譯式(interpreted)。
即時編譯,即時執行。

輸出

console.log(b)
alert(b)

log(b) 是函式呼叫。
log 的功能,就是把內部的值,印在主控台上。
console 是物件參考(object reference)

alert(b) 是彈出的視窗。

使用 console.log 比較好。可以多行輸出,也不像 alert 會中斷操作。

補充:

document.write(b);
document.getElementByID("something").innerHTML = b;

輸入

var age = prompt( "請輸入年紀:" )
console.log(age)

運算子

類型 原文 符號 功能
指定 assignment = 右邊的直指派給左邊的
數學 + - * / 一般的四則運算
複合指定 compound operators +=, -=, *=, /= a += 2 等同於 a = a + 2
遞增遞減 ++, -- a++ 等同於 a = a + 1
物件特性存取 . 特性(properties),物件的值
相等性 ==, != , ===, !== 會回傳這兩個直比較後的布林值
比較 <, >, <=, >= 小於,大於,小於等於,大於等於
邏輯 &&,`

值與型別

值的表示法,稱為型別 ( types )。

Number(1);  // 1 (number)
String(1);  // "1" (string)
Boolean(1); // true (boolean)

值同樣是 1,但轉成不同的型別。有數字、字串和布林值。

字面值(literals)- 由單引號或雙引號括弧起來的。(輸入東東,輸出就是東東)。

JavaScript 還有更多型別。陣列 (array)、物件 (object)、函式 (function)。

型別轉換

強制轉型 (coercion)

var a = "42";
var b = Number(a);

console.log(a); // "42"
console.log(b); // 42

上面是顯性強制轉型(explicit coercion)
(就是你要程式轉)

隱性強制轉型(implicit coercion)
(程式自動幫你轉)
他如何幫你轉有一定的規範。之後會再介紹。

程式碼註解

註解的方式

// single-line comment
/*
    multiline comment
 */
 var a = /* 可以放 */ 1;
 var b = 1; // 可以放
  • 過多或沒有註解都不是好事
  • 專注在 why,非 what。也可選擇性用 how。

變數

將值 (value) 指定 (assign) 給符號式容器 (symbolic container)。成為變數 (variable)

靜態型別 (static typing) & 強型別 (type enforcement)

  • 因為能夠避免不經意的值轉換,增加程式的正確性

動態型別 (dynamic typing) & 弱型別 (weak typing)

  • 允許一個變數在任何時間持有任何型別的值。

區塊(block)

大括號{...},把一個或多個述句包裹起來的區域。

條件式(conditionals)

if (something) {
    something();
}
if else (another) {
    another();
}
else {
    other();
}

迴圈(loops)

while (something) {
    something();
}

do {
    something();
} while (something);

while 在條件成立,會做一次。
do while 先做一次,再看條件有沒有成立。

函式(function)

引數 ( arguments ),也就是 參數 (parameters)

function doSomething(arguments){
    console.log(arguments);
}

function something() {
    doSomething('haha');
}

something(); // "haha"

如果有重複的事情要做,請先把它包成函式吧。
藉由函式命名,也可以讓你的程式更簡單易懂。

範疇(lexical scope)

每個函式都有自己的範疇。

  • 只有在函式內的程式碼能夠存取該函式範疇內的變數。
  • 範疇可以包住範疇。氣球內吹氣球。
  • 內部的範疇,可以存取內外兩個範疇的變數。

結尾了 是結尾!!

文章有點長,但又想細細的看完前三本。
目前會持續把內容放上來,後續會嘗試放上一句話心得。
如果有需要討論的地方,請留個言吧!(指教可能比較多)
明天見。

參考資料

你所不知道的JS


上一篇
Day1 - 這是前言,和自我介紹。
下一篇
Day3 - 型別
系列文
你為什麼不問問神奇 JavaScript 呢?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言