---
title: Javascript
tags: 網頁青少年組教材,環境設定與工具安裝,Visual Studio Code,Xampp
---
##### [回目錄](https://hackmd.io/@mackliu/rksOi3pyd)
# Javascript 程式語言介紹
javascript 是瀏灠器內建的程式語言,可以在網頁中直接撰寫並應用,主要功能是用來控制網頁上的元件及增加使用者操作的互動性。
## 程式語言基礎
由於javascript是一項程式語言,因此在使用程式語言前要先程式設計有一些了解。
### 變數
用來指派一個特定值或內容的代表,通常會以容易理解的字串來命名,比如使用 `student` 來用代表學生,實際的內容可能是學生的學號或是學生的名稱。
在javascript 中通常用 **let** 來宣告變數
```javascript=
let student='王小明' //在變數中儲存名字
or
let student=110102201 //在變數中儲存學號
```
### 資料型態
變數可以用來暫時存放資料內容,在程式語言中都有規劃一些資料型態,依據資料型態的差異,可以執行的功能和操作方式也不太一樣
* 數值 - 分為整數(-1,0,1,2,3...etc)和浮點數(-1.1,1.1,22.22...etc)
* 字串 - 分為單一字元(a,b,c....etc)及多字元組成的有意義的字串(student,school...etc)
* 陣列 - 陣列為一堆資料集合成的特殊資料,可以使用一個變數名稱來代表整個陣列的內容,比如用`classroom` 來代表一個班級,而一個班級中會多個學生。陣列通常會使用兩個中刮號來表示,每一個陣列元素使用索引值來區別,索引值從0開始:
```javascript=
let classroom=new Array();
classroom=['John','Mary','Eason','Michael','Hellen']
classroom[0] //代表 John
classroom[2] //代表 Eason
```
* 物件 - 物件的內容比陣列更複雜,除了可以存放一般資料外,也可以存放函式,和陣列最大的區別在於物件可以使用字串來代表某一個元素,物件通常使用兩個大刮號來表示。
```javascript=
let classroom={
'班長':'John',
'副班長':'Mary',
'衛生股長':'Eason,
};
classroom.班長 or classroom['班長'] //代表 John
classroom.副班長 or classroom['副班長'] //代表 Eason
```
### 運算子
所有的程式語言都有定義各式的運算子,用來對資料進行處理或比較,常見的基礎運算子有幾種
* 算術運算子 - 主要是針對數字型態的資料進行數學運算用
* 取餘數 - %
* 四則運算 - + 、 - 、 * 、 /
* 比較運算子 - 通常是用來在判斷式中取得成立或不成立的結果
* 等於 - == 或 ===
* 不等於 - != 或 !==
* 大於 - >
* 小於 - <
* 邏輯運算子 - 通常用來在流程結構中對兩個以上的運算式結果做比較
* 同時成立(AND) - &&
* 任一成立(OR) - ||
* 反向(NOT) - !
* 字串運算子 - 用在於對字串的連結上,只有一個運算子
* 字串連接 - +
### 流程結構
流程結構是程式語言的重要內涵,透過各種流程結構的組合運作,資料的處理才會發生變化,進而簡化純手動的作業,常見的流程結構如下:
1. 二元判斷式
```javascript
if( 條件判斷式 ){
//判斷式為true時執行的內容
}else{
//判斷式為false時執行的內容
}
```
2. 選擇判斷式
```javascript=
switch(判斷項目){
case '項目1':
//符合項目1時要執行的程式內容
break;
case '項目2':
//符合項目1時要執行的程式內容
break;
case '項目3':
//符合項目1時要執行的程式內容
break;
default:
//沒有任何符合項目時要執行的程式內容
}
```
3. 迴圈
```
//for迴圈用在有明確迴圈次數的場合
for(起始值;判斷式;遞增式){
//條件符合判斷式時執行的內容
}
//while迴圈用在沒有明確迴圈次數但有結束條件的場合
while(條件判斷式){
//符合條件判斷式時執行的內容
}
//do...while迴圈用在不論條件是否符合至少會執行一次的場合
do{
//符合條件判斷式時執行的內容
}while(條件判斷式)
//for..in用在陣列或物件的巡訪中
for( i in array){
//對陣列中每一個元素要執行的內容
}
```
## 基本應用
### 取得網頁中的內容
建立網頁內容,其中先放上一些標籤及內容
```htmlembedded=
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascript</title>
</head>
<body>
<div>1</div>
<div>2</div>
<p>A</p>
<span class="name">陳小明</span>
<article id="post">資通訊技術是未來社會發展的重要基礎</article>
</body>
</html>
```
使用querySelector來取得單一元素
```javascript=
//取得網頁中標籤為div的第一個元素
let d=document.querySelector("div")
//取得網頁中標籤為p的第一個元素
let p=document.querySelector("p")
//取得網頁中 class 為 name 的第一個元素
let name=document.querySelector(".name")
//取得網頁中 id 為 post 的第一個元素
let post=document.querySelector("#post")
```
使用querySelectorAll來取得多個元素,結果會以陣列型式回傳,要注意的是id類的元素在網頁上只能有一個,所以一般不會使用這個方式來取得
```javascript=
//取得網頁中標籤為div的所有元素
let d=document.querySelectorAll("div")
//取得網頁中標籤為p的所有元素
let p=document.querySelectorAll("p")
//取得網頁中 class 為 name 的所有元素
let name=document.querySelectorAll(".name")
```
### 改變元件內容
在取得網頁上的內容後,就可以進一步的對內容做出改變,可以改變的內容常見的兩種:
一. 改變元件內容,指的是標籤所包含的內容,可能是文字或是其它標籤
```javascript=
//取得網頁上標籤為div的第一個元素
let d=document.querySelector("div")
//將div的內容改變為文字'今天天氣很好'
d.innerHTML="今天天氣很好"
or
d.innerTEXT="今天天氣很好"
//取得網頁class 為 name 的第一個元素
let name=document.querySelector(".name")
//將元件的內容文字變更為"張大同"
name.innerHTML='張大同'
```
如果是使用`querySelectorAll()`來取得多個元素的話,可以使用迴圈來逐一更改內容
```javascript=
//取得網頁中標籤為div的所有元素
let d=document.querySelectorAll("div")
/*
* 使用for迴圈來逐一取出個別元素,其中
* 起始值 let i=0; 設定一個變數i從0開始算
* 判斷式 i<d.lenghth 指當i的值比陣列d中的元素要少的時候就執行迴圈的內容
* 遞增值 i=i+1 每次迴圈執行完一次就會把i的值再加1
*/
for(let i=0;i<d.length;i=i+1){
//使用d[i] 來代表每個元素,並改變元素的內容
d[i].innerHTML="第"+i+"個div元素" //使用 + 來連接字串
}
```
二. 改變元素的屬性,常見的是改變CSS樣式內容比如字型、顏色、外觀等等
```javascript=
//取得網頁中標籤為div的第一個元素
let d=document.querySelector("div")
//改變字型大小
d.style.fontSize='32px'
//改變文字顏色
d.style.color="blue"
//改變元素的內距(padding)及邊距(margin)
d.style.padding="10px"
d.style.margin="10px"
//改變元件的外框
d.style.border="2px solid green"
```
## 課堂範例
建立以下的HTML內容
```htmlembedded=
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascript</title>
<script src="./jquery-3.6.0.min.js"></script>
</head>
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</body>
</html>
```
在網頁的最後加上以下的js程式碼
```javascript=
<script>
let div=document.querySelectorAll("div")
/*使用迴圈對陣列中的每個元件做不同的處理
for(let i=0 ; i < div.length ; i=i+1){
let c=i%3
if(c==0){
div[i].innerHTML='hello world'
}else if(c==1){
div[i].innerHTML='哈囉世界'
}else if(c==2){
div[i].innerHTML='程式設計很好玩'
}
}
*/
for(let i=0 ; i<div.length;i=i+1){
//利用索引值來取得陣列中的各別元件並逐一對各種屬性進行設定
div[i].style.border='1px solid gray'; //設定邊框
div[i].style.padding='5px' //設定內距
div[i].style.margin='5px' //設定邊距
div[i].style.width='200px' //設定寬度
let fs=12+(i*2) //計算字型大小
div[i].style.fontSize=fs+"px" //設定字型大小
//利用索引值來計算每次迴圈的餘數,對所有的div元件以三個為一個循環進行設定
let c=i%3
switch(c){
case 1:
div[i].innerHTML='hello world'
div[i].style.color='red'
break;
case 2:
div[i].innerHTML='哈囉世界'
div[i].style.color='#00FF00'
break;
case 3:
div[i].innerHTML='程式設計很好玩'
div[i].style.color='#0000FF'
break;
}
}
</script>
```