---
# System prepended metadata

title: 0421 JS part 3 - loop and function

---

# 0421 JS part 3 - loop and function

lidemyMentorProgram5th week2 day3


**ternary 三元運算子**

condition ? A : B  

( 條件？true的話是這個質 : false的話是這個質 )


`console.log ( 10 > 5 ? ‘bigger’ : ‘ smaller’ )`


```
var score = 60
var message = score >= 60 ? ‘pass’ : ‘fail’
console.log (message )
```

練習一：判斷是否及格

```
if ( score >=60 ){
  console.log ( 'pass' )
  break
} else if ( score < 60 ){
  console.log ( 'fail' )
  break
}  else if ( score ===100 ){
  console.log ( 'you are no1!' )
  break
```

練習二：BMI 計算

```
var height = 1.7
var weight = 60
var BMI = weight/(height^2)

if (BMI < 18.5 ){
  console.log('too light')
}else if(18.5 <= BMI < 24){
  console.log('normal')
}else if(24 <= BMI < 27){
  console.log('heavy')
}else if(27 <= BMI < 30){
  console.log('mild heavy')
}else if(30 <= BMI < 35){
  console.log('middle heavy')
}else if(35 <= BMI){
  console.log('severe heavy')
}
```


**Loop 迴圈**


> 一直做一樣的事情，直到某個條件後終止。

（如果沒有終止條件的話，就叫做無窮迴圈）

do…while 迴圈

var i = 1

```
do {
  if (i%2 ===1){
  continue
}
 console.log(i)
 i++
} while(i<=100)

console.log(‘i=‘, i )
```


*如果要用瀏覽器跑 js 的話
除了用 <script> 標籤包起來之外，裡面的第一行可以加 debugger
就可以一行一行跑，看結果，順便知道自己寫的程式怎麼被執行的*

**while 迴圈**

```
var i = 1    

while(i<=100){
 console.log(i)
 i++
} 

console.log(‘i=‘, i )
—
var i = 1   初始值    

while(i<=100 條件 ){
 console.log(i) 要輸出的內容
 i++  跑每一圈要做的事
} 

console.log(‘i=‘, i )
```

**for loop 迴圈**

for ( 初始值; 條件; 跑每一圈要做的事 ){
  要輸出的內容
}

```
for ( var i =1 ; i<=100 ; i++){
 console.log(i)
}
```


**for loop 和 陣列一起使用**

```
var scores = [1,2,3]

for ( var i=0; i<=2; i++){
 console.log ( scores [ i ] )
}

也可以寫成

var scores = [1,2,3]

for ( var i=0; i< scores.lenght ; i++){
 console.log ( scores [ i ] )
}
```


**函式 function**

在數學上就是 f(x)
y 回傳值 = 函式f (x參數)

如果 f(a,b,c) = a+2b+3c

那寫成程式上的函式的話就是

```
function abc(a,b,c) {
   return a + 2*b + c
}
```

使用 **return** 來回傳

function 函數名稱abc(參數a,b,c) {
   return 回傳 a + 2*b + c 回傳值
}

console.log(1,2,3)


**使用陣列**

想輸入數字，就可以得到該數字從1開始到該數字的陣列輸出


```
function generateArray(n) {

  var resule = [ ]  先創造一個空陣列

  for ( var i =1 ; i<=n ; i++){
   result.push(i)
  
  return result
  }  

}

console.log ( generateArray(10) ) 
```

呼叫函式要記得加 (參數)


---

> 當 function 混用兩次時，
> 第一次寫的時候是 參數（Parameter）
> 第二次真正引用進去的叫做 引數（Argument）

JS 提供使用 **Arguments** 把參數跟引數印出來的功能
印出來會是一個長得像陣列的物件

---

**內建函式**  (至 https://developer.mozilla.org/en-US/ 可查更多資料)


**Number 的內建函式**

- 用 Number 把字串變成數字，或下 parseInt，parseInt還可以下是使用什麼進位
- 有浮點數的時候使用 parseFloat 
- 如果小數點後有太多位數，要捨去的話，再下 toFixed ( )
- Math 跟數學有關的，例如 Math.PI (PI 是常數，使用大寫)
- Math.ceil ( ) 無條件進位，Math.Floor ( ) 無條件捨去 
- Math.pow () 次方

**String 的內建函式**

- toLowerCase 全小寫，toUpperCase 全大寫
- .charCodeAt () 取字串中的某個位置的號碼 (ascii code)
- str.indexOf () 查詢這個字串內有沒有這個字串，下 console.log (index) 就會回傳出該字串的第一個字的位置
- str.length 查詢這個字串有多少字

**Array 的內建函式**

- arr.join (‘ ‘) 把每個陣列內的元素用想要的字接在一起變成字串，沒輸入的話預設是空白
- arr.map (函式)，把每個元素都帶入函式內
- arr.filter (函式) {} 把東西過濾
- arr.slice () 從某個位置上切掉，回傳新的陣列
- .splice () 插入或刪除元素，會直接改到原本的陣列
- .sort () 跟字母排序，也會改到原本的陣列
- .reverse () 反轉陣列，會改到原本的陣列

---

*記得多多使用 console.log 來 debug*



