Created
September 17, 2023 17:06
-
-
Save prof3ssorSt3v3/572d87b609c01fe960902cd48e7db39e to your computer and use it in GitHub Desktop.
A possible sequence for learning JavaScript Topics
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# JavaScript Development Topics | |
This is a sequence for learning JS topics. It is not an absolute list of all topics, nor is it a mandatory order that you must use to learn JS. It is just a logical sequencing of some of the more | |
important topics and features of the language. | |
1. Variables | |
- using `let` and `const` | |
- declaring variables | |
- assigning values to variables | |
- the purpose of variables | |
- replacing `var` with `let` and `const` | |
- naming rules | |
2. DataTypes | |
- JS primitives | |
- JS Objects | |
- single quotes, double quotes, backticks | |
- `typeof` | |
3. Truthy vs Falsey | |
- the list of falsey values | |
- concept of `nullish` | |
- `null` vs `undefined` | |
4. Logical Operations | |
- `if` statement | |
- `else if` and `else` | |
- compound if statements with `&&` and `||` | |
- comparison operators <, >, !, !=, !==, <=, >=, ==, === | |
- nullish coalescing operator | |
- ternary operators | |
- logical short circuiting | |
- `switch case` statements | |
5. Functions | |
- purpose of functions | |
- return statements | |
- parameters | |
- arrow functions vs regular functions | |
- default values | |
6. Scope and Execution Context | |
- global vs local scope | |
- block scope | |
- execution contexts | |
- hoisting | |
7. String Methods | |
- String object vs string primitive | |
- string concatenation | |
- variable and expression interpolation in template strings | |
- String methods | |
- length property | |
- square brackets to access characters | |
8. Number Methods | |
- integer vs floating point numbers | |
- NaN | |
- parseInt and parseFloat | |
- toString(base) | |
9. Math Object | |
- round, floor, ceil | |
- random numbers | |
- random colours | |
- operators +, -, \*, /, % | |
10. Operator Precedence | |
11. Objects | |
- dot notation vs square bracket syntax | |
- object literals | |
- adding, editing, deleting properties | |
- checking for existence of properties | |
12. Arrays | |
- purpose of arrays | |
- push, pop, shift, unshift, length | |
- slice, splice, sort | |
- forEach, map, filter, reduce | |
- join, String.split | |
13. Loops | |
- for, for..in, for..of, while, do..while | |
- iterable vs enumerable | |
14. Date Objects | |
- Date Objects | |
- Temporal Objects | |
14. Namespaces | |
- limiting global scope variables | |
- calling namespace functions from within namespaces | |
15. Modules and Imports | |
- export | |
- export default | |
- import and default import | |
- dynamic import() | |
- import for side-effects | |
16. Destructuring, spread, rest | |
17. Core JS, Web APIS, and NodeJS | |
18. `<script>` tags | |
- async | |
- defer | |
- type | |
19. The DOM | |
- How JavaScript sees the HTML | |
- window | |
- document | |
- document.body | |
20. Nodes and Elements | |
- difference between Nodes and Elements | |
- text nodes | |
- elements | |
- documentFragments | |
- children, childNodes, firstChild, firstElementChild, nextSibling, previousSibling, nextElementSibling... | |
- createElement | |
- createDocumentFragment | |
- innerHTML, textContent, outerHTML | |
21. Traversing, Appending, Finding, Removing Nodes | |
- querySelector | |
- querySelectorAll | |
- getElementById | |
- getElementsByClassName | |
- getElementsByTagName | |
- appendChild, append | |
- removeChild, remove | |
22. Attributes | |
- attributes vs properties | |
- getAttribute | |
- setAttribute | |
- dataset properties | |
23. Generating HTML from Data | |
- Element.innerHTML = Array.map( ).join("") | |
- templates | |
- template.content.cloneNode(true) | |
- Not calling append inside a loop | |
24. Events | |
- mouse events | |
- keyboard events | |
- window events: resize, scroll | |
- onLine, offLine | |
- touch events | |
- pointer events | |
- form events | |
- bubbling and capture phase | |
- preventDefault | |
- stopPropagation | |
- addEventListener, removeEventListener | |
- options {once: true} | |
- page lifecycle events: DOMContentLoaded, load, unload, beforeunload, pageshow, pagehide | |
- onclick old 1990s event approach | |
25. Errors and Exceptions | |
- try..catch() | |
- built-in error types | |
- new Error() | |
26. Deep vs Shallow Copy and StructuredClone | |
27. Form Validation | |
- submit vs requestSubmit | |
- checkValidity, reportValidity | |
- invalid event, submit event | |
- form properties and encoding | |
28. Callback functions | |
29. Promises | |
30. XML | |
31. JSON | |
32. JS Objects vs JSON | |
33. fetch and XMLHttpRequest | |
- HTTP Methods | |
- HTTP Status codes | |
- Request Objects | |
- Response Objects | |
- Headers | |
- Caching | |
- Body | |
- Blobs | |
- Files | |
- FormData | |
- Uploading files and data | |
- XMLHttpRequest | |
34. APIs | |
- What is an API | |
- API keys | |
- keys and params through querystring, headers, body | |
- random-data-api.com | |
- jsonplaceholder.typicode.com | |
- reddit api | |
- github api | |
- openweather api | |
- theMovieDataBase api | |
- other example apis | |
35. Form Validation | |
36. Regular Expressions | |
37. Bitwise operations | |
- AND, OR, XOR, NOT | |
- odd, even | |
38. Maps and Sets | |
39. WeakSet, WeakMap, WeakRef | |
40. Symbols | |
41. Generators and Iterators | |
- generator | |
- yield | |
- iterators | |
42. setTimeout, setInterval | |
- set and clear timers | |
43. Tasks, Microtasks, requestAnimationFrame, Event Loop | |
44. Higher Order and Pure Functions | |
45. Execution context and closures | |
46. `===` vs `==` vs `Object.is` equality | |
47. Prototypes | |
- prototype objects | |
- prototype chain | |
- **proto** - from objects | |
- .prototype - from functions | |
- .constructor | |
- Object.create | |
- Object.assign | |
- Object.hasOwn | |
- Object.freeze() | |
- Object.seal() | |
- property descriptors | |
- Object.defineProperties | |
- Object.defineProperty | |
48. `new` and `this` and lexical scope | |
49. call, apply, and bind | |
50. Class keyword | |
- constructor() | |
- extends | |
- this | |
- private and public methods and members | |
- static methods | |
- extending errors | |
51. Client-Side Storage | |
- cookies | |
- localStorage | |
- sessionStorage | |
- Cache API | |
- IndexedDB | |
- Files | |
52. Single Source of Truth | |
53. State management | |
54. Audio and Video | |
55. HTML5 Canvas | |
56. Web Components | |
57. Service Workers | |
58. Messaging | |
59. PWA | |
- manifest files | |
- service workers | |
- caching strategies | |
- WorkBox | |
60. Web Workers | |
61. Worklets | |
62. Shared Workers | |
63. WebAuth | |
64. OAuth | |
65. History API | |
66. Navigation API | |
67. Web Animations API | |
68. CSSOM | |
69. Notifications API | |
70. Sensor APIs | |
71. Screen Wake Lock API | |
72. Observers: Resize and Mutation and Intersection | |
73. Geolocation API | |
74. Page Visibility API | |
75. ScreenOrientation API | |
76. DeviceOrientation API | |
77. Drag and Drop API | |
78. Permissions API | |
79. Web Payments API | |
80. Clipboard API | |
81. View Transitions API | |
82. FullScreen API | |
83. Testing | |
- Mocha | |
- Chai | |
- Jest | |
- Vitest | |
84. JAMStack | |
85. SPA vs MPA | |
86. Build Tools and Packagers | |
- Webpack | |
- Parcel | |
- Vite | |
87. Babel | |
88. Understanding Why to Use a Framework | |
89. React | |
90. NextJS | |
91. Svelte | |
92. Gatsby | |
93. VueJS | |
94. FireBase | |
- FireStore | |
- Hosting | |
- Functions | |
- Storage | |
- Authentication | |
- Messaging | |
95. Prioritized Task Scheduling | |
96. Selection API | |
97. Streams | |
98. ByteArrays | |
99. Sockets | |
100. WebRTC | |
101. Audio Context API | |
102. Web Speech API | |
103. Web Share API | |
104. Web Push API | |
105. Web Crypto API | |
106. WebGL | |
107. WebXR | |
108. Wasm |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment