Open Lu-yeom opened 3 years ago
日期:110年4月20日(星期二)20:00~23:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(變數-物件-->判斷式-練習二)
課程筆記:
一、物件:陣列用[],物件用{},物件裡可以放任何東西,例如陣列、另一個物件...
var peter = {
name: ‘peter’,
score: 100,
address: ’taipei city’
}
console.log(peter)
也可陣列和物件一起用:
var student = []
var peter = {
name: ‘peter’,
score: 100,
address: ’taipei city’
}
students.push(peter)
或是
console.log(peter.name) or console.log(peter[‘name’])
二、變數的運算注意事項:
1.要注意型態→
var a = ‘10’ (字串)
var b = 20
console.log(a + b) 不會回傳30,會回傳1020
如果要兩者相加
console.log(Number(a) + b) 才會回傳30
或是
console.log(ParseInt(a, 10) + b)
2.要注意浮點數誤差→
var a = 0.1 + 0.2
console.log(a) 不會等於0.3,因為0.1、0.2儲存在電腦裡會有誤差值,如0.100005
三、==與===:
console.log(0 == ‘0’) 判斷相等(如數字和字串)
console.log(0 === ‘0’) 判斷相等及型態相同,使用這個較不容易出錯
四、從 Object 的等號真正的理解變數:(重要概念)
console.log({} === {}) 不相等,因為{}裡的值代表記憶體的位置,不代表其中顯示的值
物件{}除了number、string、booleen之外,其他(如陣列[])都會指向記憶體位置
五、判斷式if/else:
基礎型態→
if (ture) {
console.log(123)
}
例子→
var score = 70
if (score >= 60) {
console.log(‘pass’)
}
如果要設定兩個以上條件
var score = 65
if (score >= 60 && score <= 70) {
console.log(‘pass’)
}
加上else判斷式
var score = 60
if (score >= 60) {
console.log(‘pass’)
} else {
console.log(‘fail’)
}
六、判斷式if/else if:
var age = 70
if (age >= 65) {
console.log(‘old man’)
} else if (age >= 20) {
console.log(‘young’)
} else {
console.log(‘children’)
}
}
七、switch case:用於有很多條件要判斷時
var month = 1
switch(month) {
case 1:
console.log(‘一月’)
break
case 2:
console.log(‘二月’)
break
case 3:
console.log(‘三月’)
break
default:
console.log(‘false’)
}
另一種解法:
var month_to_chinese = [‘一月’, ’二月’, ‘三月’]
console.log(month_to_chinese[month -1])
八、三元運算子ternary: var score = 60 var isPass = (score >= 60) 額外補充之解法
三元運算子:
var score = 60
var message = score >= 60 ? (score === 100 ? ‘no1’ : ‘pass’) : ‘fail’
console.log(message)
九、練習一:判斷是否及格 var score = 60 var message = score >= 60 ? (score === 100 ? ‘you are no1’ : ‘pass’) : ‘fail’ console.log(message) 十、練習二:BMI 計算 var a = 70 var b = 180 var BMI = a /((b/100)*(b/100))
if (BMI >= 18.5 && BMI < 24){
console.log(‘正常範圍’)
} else if (BMI >= 24 && BMI < 27) {
console.log(‘過重’)
} else if (BMI >= 27 && BMI < 30) {
console.log(‘輕度肥胖’)
} else if (BMI >= 30 && BMI < 35){
console.log(‘中度肥胖’)
} else if (BMI >= 35) {
console.log(’重度肥胖’)
} else {
console.log(‘體重過輕’)
}
O:今天練習了很多程式碼,覺得非常有趣。 R: I: D:BMI的條件判斷式沒有成功,要再查查是怎麼一回事。
日期:110年4月21日(星期三)20:00~23:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(迴圈、函式)
課程筆記:
一、迴圈loop: 定義:一直做一樣的事情 無窮迴圈: 條件一直成立,迴圈一直執行 label和goto(非javascript語法) 例: var i = 1
loop: 或 label:
console.log(i)
i++
if (i <= 100) {
goto loop 或 label
}
console.log(‘finished!’)
二、do...while… 例: var i =1
do {
console.log(i)
i++
} while(i<=100)
console.log(‘i=’ , i )
或是使用continue、break
用chrome執行看看:
<script>
debugger
var i =1
do {
console.log(i)
i++
} while(i<=100)
console.log(‘i=’ , i )
</script>
三、while迴圈: 例: var i =1 //初始值 while(i<=100) { //終止條件 console.log(i++) //i每一個迴圈要做的事情 }
console.log(‘i=’ , i )
四、for loop迴圈: (已知迴圈數的情況) 例: for (var i =1; i<=100; i++ ) { //要有3個條件 console.log(i) } 與陣列結合: var scores = [1,2,3,4,5]
for (var i=0; i<scores.length; i++) {
console.log(scores[i])
}
五、函式function: y = f(x), y=回傳值, f(x)=函數, x=參數 例: function f(a, b, c) { return a + 2b + c3 } console.log(f(1,2,3)) 例、印出1~10: function generateArray(n) { var result = [] for (var i = 1; i <=n ; i++) { result.push(i) } return result }
console.log(generateArray(10))
例、印出3~10:
function generateArray(from, to) {
var result = []
for (var i = from; i <=to ; i++) {
result.push(i)
}
return result
}
console.log(generateArray(3,10))
例、印出1~100的基數
funtion logEven(number) {
if (number%2) {
console.log(number)
}
}
function print1to100 () {
for (var = 1; i <=100; i++) {
logEven(i)
}
}
console.log(print1to100())
六、宣告函式的其他方式: 例1: var hello = function() { console.log(‘hello’) } 例2: function print(anything) { anything() } 例3:(重要!) function transform(arr, transformFunction) { var result = [] for(var i = 0; i<arr.length, i++) { result.push(transformFunction(arr[i])) } return result }
function double(x) {
return x*2
}
console.log(
transform([1,2,3], double)
)
例4、匿名函式:
function transform(arr, transformFunction) {
var result = []
for(var i = 0; i<arr.length, i++) {
result.push(transformFunction(arr[i]))
}
return result
}
console.log(
transform([1,2,3], function(x)) {
return x=3
})
七、參數和引數: 參數parameter→function transform(arr, transformFunction) 底線為參數 引數Argument→transform([1,2,3], function(x)) 底線為引數 javascript特有例: function add(a,b) { console.log(arguments[0]) return a+b } console.log(add(2,5)) 八、arguments代表物件 九、function傳參數的運作機制,使用function的注意事項 交換兩個變數的函式例: function swap(a, b) { var temp = 0 a = b b = temp } 如果變數為物件,可能會影響到原本的參數 十、return 不需要知道結果→function不加return的話,預設為undefined 需要回傳結果→需要加return 注意→function遇到return會立刻執行,所以如果要設條件或計算要放在return前面
O: R:金句→如果不會解題,可以先做出函式的格式,再用另一個function補充條件 I: D:function部分的理解還是有點模糊,要再找時間重看或是查詢資料。
日期:110年4月22日(星期四)20:00~22:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(常用的內建函式)
課程筆記:
一、Number 類型的內建函式: 字串轉數字→console.log(a + Number(b)) console.log(a + parseInt(b)) console.log(a + parsefloat(b).toFixed(2))//浮點數toFixed(2)取小數點2位 console.log(Number.MAX_VALUE)//數字越大計算越不精準 console.log(Number.MIN_VALUE) console.log(Math.PI) //PI是常數,常數通常用大寫表示 console.log(Math.ceil(10.5))//小數點自動進位 console.log(Math.floor(10.9))//小數點無條件捨去 console.log(Math.round(10.4))//小數點四捨五入 console.log(Math.sqrt(9)) //開根號 console.log(Math.pow(2, 10)) //次方 console.log(Math.random()) //取0~<1的隨機數 console.log(Math.floor(Math.random*10 +1)) //產生1~10的隨機數 數字轉字串: var a = 2 a.toString() 或是 (a + ‘’) ※可參考MDN web docs網站
二、String 類型的內建函式: 變大寫→ var a = ‘abc’.touppercase console.log(a) 變小寫→ var a = ‘ABC’.tolowerCase console.log(a) 知道字串的charcode→ var a = ‘A’ var aCode = charCodeAt(0) console.log(aCode) 知道charcode的字串→ var a = ‘a’ var aCode = a.charCodeAt(0) var str = String.fromCharCode(65) console.log(str) ※大寫和小寫的charcode差32,也可用推斷方式求出 var a = ‘g’ var aCode = a.charCodeAt(0) var str = String.fromCharCode(aCode - (‘a’.charCodeAt(0) - ‘A’.charCodeAt(0))) console.log(str) 尋找字串中的關鍵字→ var str = ‘hey hello world yoyoyo’ var index = str.indexOf(‘hello’) console.log(index) 替換字串中的字→ var str = ‘hey hello world yoyoyo’.replace(/y/g, ’!!!’) console.log(str) 切開字串→ var str = ‘hey hello world yoyoyo’ console.log(str.split(‘,‘)) 去掉空格→ var str = ‘hey hello world yoyoyo’ console.log(str.trim(‘)) 用迴圈將字串隔開→ var str = ‘data1,data2, data3, data4’ console.log(str.length)
for(var i=0; i<str.length; i++) {
console.log(str[i])
}
三、Array 類型的內建函式: 結合join→ var arr = [1, 2, 3] console.log(arr.join(‘!’)) map用函式代入,取代原本陣列內的值→ var arr = [1, 2, 3]
function double(x) {
return x*2
}
console.log(arr.map(double))
四、filter排除負數→ var arr = [1, 2, 3, -1, -2, -5]
console.log(
arr
.map(function(x) {
return x*2
})
.filter(function(x) {
return x>0
})
)
五、slice取出想要的部分: var arr = [0,1,2,3,4,5,6]
console.log(arr.slice(3)) 或是 console.log(arr.slice(2, 4))
六、splice可插入、刪除元素: var months = [‘Jan’,’March’,’April’,’June’] console.log(months.splice(1,0,’Feb’)) 七、sort排序: var months = [‘Jan’,’March’,’April’,’June’] console.log(months.sort(’)) 如果是要依數字由小到大排列→ var arr = [1,30,4,21] arr.sort(function(a, b) { if (a===b) return 0 if (b>a) return -1 return 1 }) console.log(arr) 如果要依數字由大到小排列→ var arr = [1,30,4,21] arr.sort(function(a, b) { if (a===b) return 0 return a>b ? -1 : 1 }) console.log(arr) 用數學運算方法→ var arr = [1,30,4,21] arr.sort(function(a, b) { return a - b 或 b - a }) console.log(arr)
O:今天也是很多函式的運用,還無法一下子記住。 R: I: D:huli老師提供的網站有很多函式與應用範例,很方便。
日期:110年4月23日(星期五)22:30~24:00 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(新手最會出錯的地方)
課程筆記:
一、「回傳」與「印出」的差異: 執行函式時return會回傳執行的值,但是不會印出,需再加上console.log才會印出值。 二、超級無敵重要的 Immutable (不可變)觀念: 除object物件以外其他為immutable value,如boolean、string 例(字串): //不會改動到原本的值,需要指定一個變數讓新的值回傳 var a = “hello” //a的值為字串hello,放在0x01的記憶體位置 a = a.toUpperCase() //指定一個a變數,回傳變為大寫的a的值 console.log(a) //將變為大寫的a的值印出,但並不表示a變成”HELLO”
例(陣列): //可能會改動到原本的值
var arr = [1,2,3]
arr.push(4) //可直接在原本的陣列加上4,不用另外指定變數arr
console.log(arr)
三、愛用console.log,如果發現回傳值有誤,多用console.log來確認 例(判斷質數):
function isPrime(num) {
if (num === 1) return false
if (num === 2) return true
for(var i =2; i<num; i++) {
if (num % i ===0) {
return false
} else {
return true
}
}
}
console.log(isPrime(3)) //但是會出現錯誤,如15回傳true
修正:
function isPrime(num) {
console.log(‘num:’ , num)
if (num === 1) return false
if (num === 2) return true
for(var i =2; i<num; i++) {
console.log(‘i:’ , i)
if (num % i ===0) {
console.log(‘num % i === 0:’ , num, i )
return false
} else {
console.log(‘else’ , num, i)
return true
}
}
}
console.log(isPrime(3))
再修正:
function isPrime(num) {
if (num === 1) return false
if (num === 2) return true
for(var i =2; i<num; i++) {
if (num % i ===0) {
return false
}
return true
}
}
console.log(isPrime(3))
四、 練習一:印出一到九 (一) for loop for (var i = 1; i<10; i++) { console.log(i) }
(二)while
var i = 1
while(i<10) {
console.log(i++)
}
O:huli老師提醒了很多概念跟撇步,雖然還沒有完全理解,但很受用。 R: I: D:明天要把本週進度看完,開始寫作業。
日期:110年4月24日(星期六)21:00~01:00 今日進度:寫作業
O:今天作業進度hw1、hw3、hw4 R: I: D:hw2沒有想到好解法,睡個覺再繼續~
日期:110年4月25日(星期日)11:00-12:30、19:00-22:00 今日進度:寫作業(hw2、hw5、hw6) 我是笨蛋又看錯章節,以為是看到Unit1的第4段,結果竟然是要把Unit1~4全部看完...要另外找時間補了>”<
日期:110年4月19日(星期一)20:00~22:30 今日進度:[CS101] 初心者的計概與 coding 火球術3-1 + [JS101] 用 JavaScript 一步步打造程式基礎(位元運算、變數-陣列)
課程筆記: 一、十進位→數字裡不會有「十」(以10為基底),9的下一個是「一零」,碰到「十」就要進位 123=1x100+2x10+3x1=1x10^2+2x10^1+3x10^0 (^為平方之意) 二、八進位→數字裡不會有「八」(以8為基底),7的下一個是「一零」,代表進位 123=1x8^2+2x8^1+3x8^0=64+16+3=83 三、十六進位→9,A(10),B(11),C(12),D(13),E(14),F(15),10,11,12...1A,1B,...1F,20 四、二進位→碰到2就進位:0,1,10,11,100…
(1)先列出2的各次方:1,2,4,8,16,32,64,128,256 (2)找最接近的數字32→56-32=24→24-16=8 (3)56=2^5(32)+2^4(16)+2^3(8)=111000 五、<<與>>: (會比一般運算還要快速,因為二進位是電腦最原始的形式) << 1 代表乘以2
console.log('typeof [1]', typeof [1]) console.log('typeof {a:1}', typeof {a: 1}) console.log('typeof null', typeof null) console.log('typeof undefined',typeof undefined) console.log('typeof function', typeof function(){})
node index.js typeof true boolean typeof 30 number typeof 0.5 number typeof hello string typeof "30" string typeof [1] object typeof {a:1} object typeof null object typeof undefined undefined typeof function function 十、陣列Array:很多性質相近的箱子(變數)擺在一起 var score = [] score[0] = 10 score[1] = 50 score[2] = 100 … 取得陣列: var score = [1,3,5,10,100] console.log(score) 取得陣列長度: var score = [1,3,5,10,100] console.log(score.length) 取得最後一個數值: var score = [1,3,5,10,100] console.log(score[score.length - 1]) 加上新的值: var score = [1,3,5,10,100] score.push(1000) console.log(score)
O: R: I: D:今天看的章節不多,但卻花了不少時間,最主要是作筆記佔了很多時間。