---
# System prepended metadata

title: JS小知識
tags: [ALPHACampWeek1]

---

###### tags: `ALPHACampWeek1`

JS小知識
===
Js的Scanf : prompt('input something')
---
```javascript=
input = prompt('Guess number')
```

判斷是否為數字 isNaN()
---
```javascript=
if (!isNaN(answer) && answer <= 100 && answer > 0) {
    console.log(`Answer is: ${answer}`)
    break
  }
```
undefined vs null
---
- undefined 來代表「尚未初始化的變數」，而 null 代表「不存在的物件」，因此，遇到「沒有物件」的情況時，會得到 null。

- 現在我們的建議是這樣，把 undefined 留給系統，不要主動使用它，當變數沒有被初始化，或你試著呼叫一個不存在的物件屬性或陣列內容時，你會收到 undefined；而當你想有意識地賦予「空值」給變數時，使用 null。
特殊用法:要驗證是否為物件要先宣告為null
---
const result = null
if (result && typeof result === 'object') {
  console.log('this is an object!!')
} else {
  console.log('i cannot find an object!')
}

Math套件
---
Math.ceil() - 小數點自動進位
Math.floor() - 自動捨去小數點
Math.round() - 四捨五入
其他還有：

Math.sqrt(64) - 開平方，會回傳 8
Math.abs(-4) - 絕對值，會回傳 4
Math.random() - 取亂數，會回傳 0～1 (不包括 1) 的隨機數字
Math.pow(2, 3) - 次方，這裡會回傳 2 的 3 次方，也就是 8

四捨五入到小數第二位
---
Number(((length) / 2).toFixed(2

- 通過倍數讓小數點消失
const x = 0.1
const y = 0.2
const result = (x * 10 + y * 10) / 10
console.log(result === 0.3) // true

call by value vs. call by reference
---
數字 => call by value
物件,陣列 => call by reference


用Object.assign可以解決call by reference的問題
---
- 物件通常都用const來宣告
let a = { foo: 1 }
let clone = {}
Object.assign(clone, a)

