# 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*