20210419 wk2 筆記


Posted by Vickey on 2021-04-18

執行順序

  1. 先看作業內容、自我檢測兩部分
  2. 教材 (理學院)
  • 本期課程影片 第二週(04/19 ~ 04/25)- 於 4/18 完成
  • 理學院 [JS101] 可以看到「綜合練習 Lv1」就好,裡面的題目記得寫一下。- 於 4/20 完成判斷式題目兩題 ; - 於 4/25 完成
  • 理學院 [ALG101] ,看到 Unit4 - 於 4/25 完成

參考資料: 從博物館寄物櫃理解變數儲存模型

  • 若是想要繼續研究演算法相關的議題,可以看 [CS101] 7-1 ~ 7-4,但如果前面的影片看完時間就差不多了,可以留到以後再看。
  1. 寫作業 - 於 4/19 完成 hw1;- 於 4/20 完成 hw2 ; 於 4/25 完成除了hw5的所有作業
  2. 直播影片
    # 筆記紀錄
    << 相當於數學乘法;>> 相當於數學除法;位元運算比邏輯運算快。
    &&整體運算,舉例: true && false 因為前面已成立,後面不理會;false || true 因前面假值故看後面為 true。這邊有邏輯運算的短路性質。
    & 位元運算,舉例:1010 & 1111 = 10 (10源自於 2^1+2^3)
    二進位數反轉+1,產生溢位;逆推回來則為反轉-1
    二進位最後一位數為1、為0 為基數、偶數;故可藉由加上0001看結果而推知基數還是偶數。
    a++ v.s.++a
    =賦值;==判斷相等;===除判斷相等外,加以判斷型態是否相同,以此為主不會錯。
    字串相加''+'';數字與字串相加會自動變為數字;當然IT的事件不容混淆,所以可用兩個功能將字串轉為數字,私以為場景應該是不管使用者輸入什麼都轉為數字型態相加的意思,分別為NumberparseInt(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)

概念介紹

迴圈

  1. while 先 check 再做
  2. do...while 先做再 check (第一次一定要做)
  3. 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 後放的語句不執行.

名詞解釋

  1. parameter 參數 vs argument 引數
  • call function = 引數 ; 為真正傳進 function 的值, 像是 function (arr, trans) 最下方 console.log(10,20) , 此處 10,20 為引數 (引數為 JS 特有)
  • parameter = 在 function 中長的樣子, 像是剛提及的 arr, trans 即為參數.
  • 參數可帶有其他資訊, 像是誰呼叫, 要給誰 ; 而參數為物件, 非陣列.

function 傳參數運作機制

  1. boolin, 數字, 字串會copy一份進function 所以不會改動原值
  2. 物件, 陣列會改動內容
    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 表示次方之意

#&& #|| #AND #NOR #js #程式基礎 #物件 #陣列







Related Posts

體驗最新的 JS 語法:Babel

體驗最新的 JS 語法:Babel

Colorful Glowing

Colorful Glowing

MTR04_0922

MTR04_0922


Comments