iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Modern Web

【網頁是什麼,能吃嗎】── 零基礎也能學會網頁製作系列 第 5

【Day 05】給畫面產生一點新的變化:來些程式語言吧

  • 分享至 

  • xImage
  •  

tldr: javascript的基本語法,包括變數宣告、判斷式、迴圈等等。


基本規則

特性:

  1. Case-Sensitive (大小寫會影響名稱)
  2. statements:每一行指令的名稱,並以分號 ; 將其做分別

註解

// 這是一個單行註解

/* 這是一個多行註解 */
    
/* 下方為特殊的註解:Hashbang Comment,用於指定所要執行的程式引擎
   這種僅會出現在檔案的最上方 */
#!/usr/bin/env node

變數

特性:

  1. 變數名稱稱作為:identifiers
  2. 常見使用字元:a~z, A~Z, _, -, $
  3. 可使用字元:Unicode字元
  4. 變數必須於使用前設定其值
  5. Javascript為動態類型語言(dynamically typed language),因此宣告變數時不必指示其資料型態
類別 說明 需要初始化?
`var 宣告一個變數 No
let 宣告一個區域變數 No
const 宣告一個無法變更值的區域變數 Yes
資料型態 說明
Boolean 是(True) 與 否(False)
Number 數字(整數或浮點數)
BigInt 長整數
String 字串(一長串的字元)
[Symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) 該資料型態的物件皆為「獨一無二」且「無法變動」
null 空白
undefined 未定義
Object 物件

宣告範例:

let x = 10;

Array 陣列

為一列的物件,稱之為陣列。
陣列以分號將物件分開,若兩個分號間沒有元素,則陣列中將會留下一個未有任何儲存資料的空格。

/* 以下為陣列: ["apple", 空白, "banana"] 的宣告
const array_1 = ["apple", , "banana"]

Literals 字面值

Literals為一種表示資料數值的方式,不過與變數不同的是,他們無法改變,並且是直接於程式碼中給出特定且不會更動(指的是於程式執行時)的值。
一個容易理解這個名詞的方式是,英文中的Literally,有著確實地、名副其實地之意義,而他的名詞型態為Literal,並且在程式碼中,Literals將會Literally出現在檔案中,這麼一想是不是變得比較容易懂呢?

Block Statement

大括弧內的區域皆為「Block區塊」,此物常與控制流程與函數等一同出現。

{
  statement1;
  statement2;
  // …
  statementN;
}

控制流程(Control Flow)與 迴圈(Loops)

if...else

如果if的條件達成(為True),將執行第一部份的區塊,否則將執行else的區塊。
if下方為 else if的話,則判斷它是否條件達成,若有則執行其區塊,否則進到下一行(若是else則直接執行,是else if的話則繼續做判斷)

表示False之值:

  • false
  • undefined
  • null
  • 0
  • NaN
  • 空白字串 ("")
if (condition1) {
  // Statements for when condition1 is true
  // …
} else if (condition2) {
  // Statements for when condition2 is true
  // …
} else if (conditionN) {
  // Statements for when conditionN is true
  // …
} else {
  // Statements for when all conditions are false
  // …
}

Switch

判斷switch中的內容是否符合任何一個case所述,若是,則從該行開始執行,且遇到break將會直接跳至區塊的末端。
如果沒有任何case符合條件,則執行default(預設)如果它存在。

switch (expression) {
  case label1:
    statements1;
    break;
  case label2:
    statements2;
    break;
  // …
  default:
    statementsDefault;
}

for 迴圈

for (let step = 0; step < 5; step++) {
  // 每次執行完將step加一,當step大於等於5時將會結束迴圈,共執行5次
  // ...
}

while 迴圈

重複執行直到條件不成立

while (condition){
  // statement
  // ...
 }

do...while 迴圈

與while迴圈相似,不過它是先執行工作,再去判斷要不要進行迴圈

let i = 0;
do {
  i += 1;
  console.log(i);
} while (i < 5);

函數(functions)

  • 函式的主體(body)可被稱作為closure,而當程式離開closure後,其內部變數的值仍會被保留著。
  • 宣告與使用
function func(num) {
  return num * num;
}

console.log(func(3));
  • 函數的宣告可以為巢狀的,意及可以在函數宣告中再宣告一個函數,而第二個函數將只能於大函數內部使用。
function addSquares(a, b) {
  function square(x) {
    return x * x;
  }
  return square(a) + square(b);
}

function expressions

不為函式命名,而是將它存入一個變數中。如此一來之後便可以將該變數作為參數傳入其他的函式之中。

function map(f, a) {
  const result = new Array(a.length);
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const numbers = [0, 1, 2, 5, 10];
const cubedNumbers = map(function (x) {
  return x * x * x;
}, numbers);
console.log(cubedNumbers); // [0, 1, 8, 125, 1000]

宣告後直接呼叫

將函式的宣告用小括弧包裹起來,並於其後方再加一組小括弧,如此宣告結束後函式便會立刻被呼叫並執行。

(function () {
  // Do something
})();

const value = (function () {
  // Do something
  return someValue;
})();

closure範例

const createPet = function (name) {
  let sex;

  const pet = {
    // setName(newName) is equivalent to setName: function (newName)
    // in this context
    setName(newName) {
      name = newName;
    },

    getName() {
      return name;
    },

    getSex() {
      return sex;
    },

    setSex(newSex) {
      if (
        typeof newSex === "string" &&
        (newSex.toLowerCase() === "male" || newSex.toLowerCase() === "female")
      ) {
        sex = newSex;
      }
    },
  };

  return pet;
};

const pet = createPet("Vivie");
console.log(pet.getName()); // Vivie

pet.setName("Oliver");
pet.setSex("male");
console.log(pet.getSex()); // male
console.log(pet.getName()); // Oliver

參數

用於傳至函式內的值,可設預設值(如下方的b = 1

function multiply(a, b = 1) {
  return a * b;
}

console.log(multiply(5)); // 5

謝謝各位的閱讀,有任何想法或建議都歡迎留言告知!明天會繼續努力更新的!

參考資料:


上一篇
【Day 04】無難度體驗:一起來實作網頁吧!
下一篇
【Day 06】 來學習設計吧:Figma入門練習
系列文
【網頁是什麼,能吃嗎】── 零基礎也能學會網頁製作7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言