執行順序
- 先看作業內容、自我檢測兩部分
- 教材 (理學院)
- 本期課程影片 第二週(04/19 ~ 04/25)- 於 4/18 完成
- 理學院 [JS101] 可以看到「綜合練習 Lv1」就好,裡面的題目記得寫一下。- 於 4/20 完成判斷式題目兩題 ; - 於 4/25 完成
- 理學院 [ALG101] ,看到 Unit4 - 於 4/25 完成
參考資料: 從博物館寄物櫃理解變數儲存模型
- 若是想要繼續研究演算法相關的議題,可以看 [CS101] 7-1 ~ 7-4,但如果前面的影片看完時間就差不多了,可以留到以後再看。
- 寫作業 - 於 4/19 完成 hw1;- 於 4/20 完成 hw2 ; 於 4/25 完成除了hw5的所有作業
- 直播影片
# 筆記紀錄
<<
相當於數學乘法;>>
相當於數學除法;位元運算比邏輯運算快。
&&
整體運算,舉例:true && false
因為前面已成立,後面不理會;false || true
因前面假值故看後面為 true。這邊有邏輯運算的短路性質。
&
位元運算,舉例:1010 & 1111 = 10 (10源自於 2^1+2^3)
二進位數反轉+1,產生溢位;逆推回來則為反轉-1
二進位最後一位數為1、為0 為基數、偶數;故可藉由加上0001看結果而推知基數還是偶數。
a++
v.s.++a
=
賦值;==
判斷相等;===
除判斷相等外,加以判斷型態是否相同,以此為主不會錯。
字串相加''+''
;數字與字串相加會自動變為數字;當然IT的事件不容混淆,所以可用兩個功能將字串轉為數字,私以為場景應該是不管使用者輸入什麼都轉為數字型態相加的意思,分別為Number
、parseInt(a,10)
此處10表10進位為預設。需要再延伸了解的地方:兩者差異為何? '' v.s. "" (看腳本的寫法與JS定義是否不同)
- 浮點數誤差 > 延伸課程:如何儲存數字。
- 正負數相加必為0,方法為反轉+1或-1反轉;若數字用 8 個 bit 存取,則範圍由
-2^7 ~ 2^7-1
i.e. -128~127
舉例 01110000 + 01000000 十進位制=176 但已經超過上面的127範圍〈溢位〉
所以-1反轉 卻等於-80
回傳 vs 印出,我們是針對回傳值去測試。
陣列 [] V.S 物件 {}
物件中可存放屬性、陣列、物件、function
- 當陣列與物件一起用時,
var students: [ ] { name:'Peter' score: 100 address: 'taipei' phone: "010020030" } 此為第一組 student.push(Peter) console.log(students[0]) /*可拿出該物件欲取的東西console.log(students[0].name)*/ /*若不混用陣列物件的話, 可以將前面student.push(Peter) 此行拿掉, 並可寫成 console.log(Peter.name) 或 console.log(Peter['name']) */
- 物件中可放陣列
- 物件中放物件,以Peter.father舉例
console.log(Peter.father.name) 或 console.log(Peter['father']['name']) - 物件中也可放 function
obj 等號: 理解變數
兩個變數存的值一樣卻不相等,不是等號的問題,而是記憶體存放位置不同,JS 無法將記憶體位置給出,只能給該位置的值給我們。
舉例說明:將obj與obj2 指涉到同一個記憶體位置,判斷相等,後來改變obj2的鍵值,卻不會因此改變原記憶體位置的值,原因是因為新的鍵值存放的是不同記憶體的位置。
說明第二種情況:
var obj = { a:1 }
var obj2 = obj
obj2.a = 2
此時會發現 obj {a:2} 且 obj2 {a:2} 兩者居然相同,因為同一記憶體位置可以 nfs server 理解。設定 nfs server 位置在 /opt/public 將遠端的路徑掛載到此位置 (也可在同一台自己測試),我將 /opt/abc 掛載到 /opt/public 無論哪一端對該目錄下有所異動,兩邊均會同時影響。
- 判斷式寫法:if...else ; case 替換
- 字串函式一:大小寫變化,toUppercase 或 acode (待確認正確字)
- 字串函式二:換字,.replace ; RegExp (前者為只換第一個碰到的字,後面不管;後者更換全部,此為正規表示式)
- 字串函式三:切字,split 用以切開變陣列,處理字串。把空格去掉的話可以用 trim
練習題
一、判斷是否及格
function passornot(score) {
if (score == 100) {
console.log('you are no1!')
} else if (score >= 60) {
console.log('pass')
} else {
console.log('fail')
}
}
passornot(59)
二、計算BMI
function count(high,kg) {
var HIGH=(high/100)
var BMI=(kg/(HIGH*HIGH))
console.log(BMI)
if (BMI >= 35) {
console.log('重度肥胖')
} else if (BMI >= 30) {
console.log('中度肥胖')
} else if (BMI >= 27) {
console.log('輕度肥胖')
} else if (BMI >= 24) {
console.log('過重')
} else if (BMI >= 18.5) {
console.log('正常範圍')
} else {
console.log('體重過輕')
}
}
count(180,75)
概念介紹
迴圈
- while 先 check 再做
- do...while 先做再 check (第一次一定要做)
- for loop 結構先寫, 語法就不會錯 for (start; end ; do for every loop) { } ; 而陣列起始值為0.
- 若未設停止條件為無窮迴圈, 須以
ctrl + c
, 否則吃光資源. - continue v.s. break
continue 可跳過此迴圈, 直接跑下一圈 ; break 是跳出整個 block
回傳 vs 印出 return vs console.log
1.不須知道執行結果, 只做事用印出即可
2.需回傳值(需做計算的話), 用 return
3.一碰到return就會返回, 所以 return 應放在最下面一行, 如若不然, return 後放的語句不執行.
名詞解釋
- parameter 參數 vs argument 引數
- call function = 引數 ; 為真正傳進 function 的值, 像是 function (arr, trans) 最下方 console.log(10,20) , 此處 10,20 為引數 (引數為 JS 特有)
- parameter = 在 function 中長的樣子, 像是剛提及的 arr, trans 即為參數.
- 參數可帶有其他資訊, 像是誰呼叫, 要給誰 ; 而參數為物件, 非陣列.
function 傳參數運作機制
- boolin, 數字, 字串會copy一份進function 所以不會改動原值
- 物件, 陣列會改動內容
obj.number = 3 會改動原值
abc = 3 賦值另存記憶體位置, 不會改動原值
ASCII code
小寫 97-122
大寫 65-90
大小寫轉換 = +- 32
- 大小寫轉換寫法有三: 判斷 n 是否介於 a~z or A~Z , 此處大小於需分開寫兩個, 不可寫成
a < n < z
; ASCII code: string.fromCharCode(charCodeAt(0)) ; 所有字串轉大小可善用工具 .toUpperCase()
陣列內建函式
.filter 過濾用
.map 將值帶入作業並改變原值
slice 回傳陣列/分片, 若有兩個值, 會切掉第二個值(包含)以後的值
splice 改變原本陣列; 但我在使用時無法透過迴圈去一個個替換或插入字元, 不曉得是否是其侷限; 可用於插入或刪除元素
JS 型態, 空間, 時間限制
- 在解題前須先確認範圍
### 型態限制: int, 數字 Numbe.MAX_SAFE_INTEGER, 浮點樹精確度
輸出
- 標準輸出 VS 函式輸出
標準輸出 cat input.txt | node code.js
九九乘法表: 兩層迴圈
- 裡面那層走完迴圈, 外面再走第二圈
## 平方數判斷
方法一:
先開 √ 根號 ; 再去除浮點數 ; 最後以相乘判斷是否等於一開始的值
方法二:
從 0 到給定範圍彼此相乘
## 水仙花 (尚不明白, 待補)
**
為JS 表示次方之意