---
# System prepended metadata

title: JavaScript 基礎課程 (5)
tags: [JavaScript]

---

---
robots: noindex, nofollow
tags: JavaScript
---

# JavaScript 基礎課程 (5)

## 上次課程提要
- Function
  - Function 的四個組成要素
  - 定義與呼叫 function
- 資料型別：`undefined`

### 補充：參數的順序
```javascript
function print(first, second, third, fourth) {
  console.log(first);
  console.log(second);
  console.log(third);
  console.log(fourth);
}

// 全部參數都傳
print(1, 2, 3, 4);
// 1
// 2
// 3
// 4

// 只傳前面三個參數
print('Ann', 'Bob', 'Cindy');
// 'Ann'
// 'Bob'
// 'Cindy'
// undefined

// 只傳第四個參數
print(undefined, undefined, undefined, 'David');
// undefined
// undefined
// undefined
// 'David'
```

## 今日進度
- 資料型別：
  - Object（物件）
  - Array（陣列）
- Netlify 操作簡介

## Object（物件）
- 把相關的資訊以 key-value pair 的形式儲存在同一個值
- 以 `string` 當作 key（不能重複）
- value 可以存放任意資料型別（內容重複也無所謂）
- key 會指向 value，但反過來不行

### Key-Value Pair
![](https://www.learnbyexample.org/wp-content/uploads/python/Dictionary-Key-Value-Pairs-Illustration.png)

### 想成是銀行保險箱⋯⋯
![](https://www.completecontroller.com/wp-content/uploads/safe-deposit-box-Complete-Controller-1030x687.jpg)
- key：保險箱號碼
- value：保險箱裡頭的東西
- 可以依照鑰匙號碼找到對應的保險箱，並拿出裡面的東西
- 光看拿出來的東西，無法回推保險箱的號碼

### 使用方法

#### 宣告物件
```javascript
let myBook = {
  title: '原子習慣',
  author: 'James Clear',
  translator: '蔡世偉',
  price: 330, // 以前不加最後一個逗號，現在新的瀏覽器可加可不加
};
```

#### 存取物件的屬性（property）
```javascript
objectName.propertyName
//        └── 把「.」看成「的」，某物件的某屬性
```

```javascript
myBook.title // '原子習慣'
myBook.pageCount // undefined
```

> 我們用 `console.log` 的時候，其實就是在存取 `consnole` 這個物件的 `log` 屬性

#### 更改某個屬性的值
```javascript
myBook.price = 261;
```

#### 移除某個屬性
```javascript
delete myBook.translator;
console.log(myBook.translator); // undefined
```

### 使用 Object 的好處

#### 把多個參數包成一個參數，減少參數數量
```javascript
function evaluateCourse(course) {
  // 選課邏輯
  if (course.time < 12) {
    return false;
  }
  if (course.difficulty > 3) {
    return false;
  }
  if (course.funLevel === 1) {
    return false;
  }
  return true;
}

// 英文
let englishCourse = {
  credit: 2,
  difficulty: 5,
  funLevel: 2,
  time: 8,
};
// 色彩學
let colorTheoryCourse = {
  credit: 2,
  difficulty: 2,
  funLevel: 1,
  time: 15,
};
// 視覺傳達理論
let visualCommunicationCourse = {
  credit: 3,
  difficulty: 5,
  funLevel: 4,
  time: 13,
};

// 真正在使用時，不需要傳遞很多參數
let shouldTakeEnglishCourse = evaluate(englishCourse);
let shouldTakeColorTheoryCourse = evaluate(colorTheoryCourse);
let shouldTakeVisualCommunicationCourse = evaluate(visualCommunicationCourse);
```

## Array（陣列）
- 把相關的資訊按照順序儲存在同一個值
- 陣列有 index（索引值）紀錄每個值的順序（從 0 開始算）
- 生活中的例子：定期紀錄體重、瀏覽紀錄、Instagram 的貼文順序

![](https://assets-lighthouse.alphacamp.co/uploads/image/file/8669/ExportedContentImage_00.png)

### 使用方法

#### 宣告陣列
```javascript
let myScores = [62, 70, 48, 80];
```

#### 存取陣列裡的值
```javascript
myScores[0] // 62
myScores[1] // 70
myScores[2] // 48
myScores[3] // 80

myScores.length // 4（目前陣列的長度）
myScores[myScores.length - 1] // 存取陣列最後一個值
```

#### 更改陣列裡某個值
```javascript
myScores[0] = 64;
```

#### 增加／移除陣列裡的值
```javascript
// 把值加到陣列的最後面
myScores.push(76);
console.log(myScores); // [64, 70, 48, 80, 76]

// 移除陣列最後一個值
myScores.pop();
console.log(myScores); // [64, 70, 48, 80]

// 把值加到陣列的最前面
myScores.unshift(83);
console.log(myScores); // [83, 64, 70, 48, 80]

// 移除陣列第一個值
myScores.shift();
console.log(myScores); // [64, 70, 48, 80]

// 移除中間的值
myScores.splice(2, 1); // 找到第 2 個索引值位置，移除 1 個值，不加上新的值
console.log(myScores); // [64, 70, 80]

// 在中間加東西
myScores.splice(1, 0, 7); // 找到第 1 個索引值位置，移除 0 個值，加上 7 這個值
console.log(myScores); // [64, 7, 70, 80]
```

#### 示意動畫（`push`、`pop`、`shift`、`unshift`）
https://simplestepscode.com/array-push-pop-shift-unshift

### Object vs. Array
|              | Object                  | Array       |
| ------------ | ----------------------- | ----------- |
| 資料儲存形式   | key-value pair          | 依序儲存      |
| 資料存放限制   | key: 字串; value: 任意   | 任意         |
| 如何存取值    | 透過 property            | 透過 index   |
| 使用時機      | 順序不重要時              | 資料順序重要時 |


## Netlify 操作簡介
- 重新上傳網頁
- 上傳新的網頁
- 改網站名稱
- 刪除網站


---


<div style="display: flex; justify-content: space-between;">
  <a href="https://hackmd.io/@gsscsid/javascript-basics-4">⬅️&nbsp;JavaScript 基礎入門課程 (4)</a>
  <a href="https://hackmd.io/@gsscsid/javascript-basics-6">JavaScript 基礎入門課程 (6)&nbsp;➡️</a>
</div>
