photo credit

When we talk about space complexity, we only talk about the space required by the algorithm, not including space taken up by the inputs. This is called auxiliary space complexity (Auxiliary Space is the extra space or temporary space used by an algorithm — from What does ‘Space Complexity’ mean?
View Discussion
)

  • Most primitives(booleans, numbers, undefined, null) are constant space
  • Strings require O(n) space (n is the string length)
  • Reference types(arrays, objects) are generally O(n), n is the array length and number of keys.

*this is a note from JavaScript Algorithms and Data Structures Masterclass

--

--

credit https://unsplash.com/photos/8qEB0fTe9Vw

在 JavaScript 中的資料型別是動態的,若沒有給定變數的型別,JavaScript 會進行判斷,而強制轉型,例如有用到運算子,JavaScript 就會覺得你是要讓值變成數字進行運算,因此就會將運算子左右的值強制轉型為數字。

JavaScript 中的強制轉型(coercion)分為兩種,分別是「顯性轉型」(explicit coercion)及「隱性轉型」(implicit coercion),簡單分類的話就是

在程式碼中可以看到的就是「顯性轉型」,例如 toString() / parseInt() 等等。

而「隱性轉型」則是 JavaScript 常常搞混初學者的部分,包含 4 == “4 “/ 1 * ” 2 “ 等等。

值得注意的是,強制轉型的結果都會是基本型別,例如數字、布林值或字串。

本篇僅會討論布林值、數值、字串彼此的轉型,不會提到較進階的陣列或物件的轉型。以下也透過結論先行比較表格的方式讓大家大略清楚各資料型別轉型前後的比較。

--

--

credit https://unsplash.com/photos/B3l0g6HLxr8

在 JavaScript 中要進行條件判斷,大部分會選擇 if… else… 或 switch。因此,本文除了介紹兩者語法上的不同,也會介紹兩者的語法、易讀性及效能差異,最後介紹使用時機。

結論先行:基於易讀性及效能,在大型專案需要越大量、複雜且無需比較的判斷時,越多數會選擇 switch,相反地,若只是簡單的少數且需要比較的判斷,if… else… 反而會比較直觀。
白話說,switch 用來「在幾個確定的選項中決定執行哪一個」,而 if… else… 則用來「在一定的範圍中決定要不要執行(不要的話就跳下一個繼續決定要不要執行)」。

語法差異

if… else… 執行區塊就是 {} 中間,因此只會選擇一個決定「要不要執行」,而 switch 是透過 case 來作為條件,若沒有 break,就會一路執行到底。以下易讀性也會針對語法進行比較,因此這裡就不再重複貼上語法。

易讀性

這裡所說的易讀性並不是說哪一個一定比較易讀,但像先前提過的,還是要按照專案需求做決定,只是一般來說,大部分人會覺得 switch 比較易讀,但若只是簡單的判斷,如下圖,反而 if… else… 看起來會比較直觀。

--

--

credit / stackoverflow

null 和 undefined 在 JavaScript 中都是資料型別,兩者都只有一種值(像 number 這種資料型別就有 1 / 2 / 3…等很多種值),也就是各自的值,意思是,null 這種資料型別只有一種值,就是 null,而 undefined 這種資料型別也只有一種值,就是 undefined。

接下來要比較其異同

白話文

undefined 意思是「變數還沒給值,所以不知道是什麼」
null 意思是「變數曾經有或沒有值,但現在沒有值」

--

--