jas0nhuang

[筆記] 搞懂 JS 還不懂的部分 - 2

J+1 [日記]

寫作業與題目時的問題

關於 Eslint

作業庫裡面設定 Eslint 會禁止 ++ 的使用,雖然 JavaScript 大神 Crockford 大概 10 年前就在說不要用 ++-- Crockford on JavaScript - Part 5: The End of All Things(連結會直接從討論 ++-- 的地方開始),但是課程裡還是有教到,不知道應該如何處理?真的不應該使用?先不要使用?還是有辦法改成不糾正這個問題?
還有句尾的分號也設定了一定要加,老師在一些示範影片裡面好像也都沒有打分號,不知道是不是能夠改為不必加?

Immutable 到底可變不可變?!

Primitive values(原始數值)
Primitive type(原始資料型態)

All primitives are immutable, i.e., they cannot be altered. It is important not to confuse a primitive itself with a variable assigned a primitive value. The variable may be reassigned a new value, but the existing value can not be changed in the ways that objects, arrays, and functions can be altered.
一定要搞清楚「變數」與「原始數值」之間的差異。

不可變的數值在經過函數處理後一定要回傳給一個「變數」儲存(可以這樣表達嗎?),因為它的「原始數值」沒辦法被改變。
因為「原始數值」

let a = 'hello' // a 是變數 'hello' 是「原始數值」
a.toUpperCase() // 沒有作用,'hello'被處理後沒有被儲存
a = a.toUpperCase() // 'hello' 在經過處理後被傳回給 a

物件(object)為「可變」資料型態
如陣列(array)是物件(object)的一種,所以它是可變的,因此對它呼叫內建函式處理後會直接改變它本來的內容,然後回傳另一個值,所以如果把函式處理後的值傳給一個變數,它「可能」會與本來的內容不同,例如:

let a = [1, 2]
a.push(3) // 原始陣列會被更新為 [1, 2, 3]
console.log(a) // [1, 2, 3]
a = a.push(99) // 原始陣列同樣會被更新,變成 [1, 2, 3, 99],但是這個函式是會回傳新陣列的長度,所以 a 就會被賦值為 4
console.log(a) // 4

但是有些函式的結果是一樣的,像是 array.reverse()

但是物件裡也有不會改動到原本資料的函式,如 array.join()

array 真的很煩,.splice() 與 .slice() 的行為也不同


跟家人去公園玩了一個下午,晚上去朋友家吃飯,下面預訂要完成的內容都沒有完成 XD。但是難得可以出門到空曠的地方跑一跑,還跟公園裡的陌生人打了一下排球,雖然不太會打,但是運動一下真的蠻舒服的。

reduce 用法

綜合題目練習 Lv1 練習十,可以用 reduce()解。

浮點數誤差