JavaScript
JS01 - JavaScript Basic Syntax
Complexity
Junior
Timeframe
3h
Summary
You should understand all basic syntax features of JavaScript.
Skill Breakdown
You should understand how to execute JavaScript code in the browser and in Node.js.
You should understand the following things about variables and data types:
- declaring variables with
var,letandconst - why you should never use
varand preferletinstead - important primitive data types:
numberbooleanstringundefined
You need to understand how to form expressions using operators and be familiar with the following operators:
- assignment operator
= - arithmetic operators
+,-,*,/,**,% - comparison operators
==,===,!=,!==,<,<=,>,>= - logical operators
&&,||,! - nullish coalescing operator
?? - shorthand assignment operators
+=,-=,*=,/=,**=,%= - postfix increment operator
++and postfix decrement operator-- - string concatenation operator
+ - ternary operator
? : typeofoperator
You should understand why === is always preferrable over ==.
You also need to know how to group expressions using parentheses.
You should also be aware that working with real numbers can lead to precision problems.
You need to know how to use template strings.
You should understand the basic syntax behind arrays:
- constructing arrays
- accessing array elements
- changing array elements
- retrieving the length of an array
- array destructuring
- using the spread syntax to spread arrays
You should understand the basic syntax behind objects:
- constructing objects
- accessing properties with the dot notation and the bracket notation
- nesting objects
- object destructuring
- using the spread syntax to spread objects
You should understand the difference between assigning an array/object and copying an array/object.
You should understand the following conditionals:
if...elsestatementswitchstatement
You should also be aware of the concept of truthy and falsy values.
You should understand the following loops:
whileloopsdo...whileloops- regular
forloops
You should also be able to use the break and the continue statements to change control flow.
You should understand the following things about functions:
- function definitions
- function expressions
- function parameters
- the
returnkeyword - function calls
- anonymous functions
- arrow functions
- default parameters
- rest parameters
You should understand the concepts of instance methods and static methods.
You should understand the concept of scope and be familiar with the following scopes:
- block scope
- function scope
You should know how to throw error using the throw statement and how to catch errors using the try...catch statement.
Required Resources
Getting Things Done in Next.js:
- Hello World (opens in a new tab)
- Primitive Data Types (opens in a new tab)
- Arrays and Objects (opens in a new tab)
- Control Flow (opens in a new tab)
- Functions (opens in a new tab)
- Error Handling (opens in a new tab)
Optional Resources
MDN JavaScript Guide:
- Introduction (opens in a new tab)
- Grammar and types (opens in a new tab)
- Control flow and error handling (opens in a new tab)
- Loops and iteration (opens in a new tab)
- Functions (opens in a new tab)
- Expressions and operators (opens in a new tab)
Eslint Rules:
MDN JavaScript Reference & Glossary:
- var (opens in a new tab)
- let (opens in a new tab)
- const (opens in a new tab)
- Assignment (opens in a new tab)
- Addition (opens in a new tab)
- Subtraction (opens in a new tab)
- Multiplication (opens in a new tab)
- Division (opens in a new tab)
- Exponentiation (opens in a new tab)
- Remainder (opens in a new tab)
- Equality (opens in a new tab)
- Strict Equality (opens in a new tab)
- Inequality (opens in a new tab)
- Strict Inequality (opens in a new tab)
- Less than (opens in a new tab)
- Less than or equal (opens in a new tab)
- Greater than (opens in a new tab)
- Greater than or equal (opens in a new tab)
- Logical AND (opens in a new tab)
- Logical OR (opens in a new tab)
- Logical NOT (opens in a new tab)
- Nullish coalescing (opens in a new tab)
- Addition assignment (opens in a new tab)
- Subtraction assignment (opens in a new tab)
- Multiplication assignment (opens in a new tab)
- Division assignment (opens in a new tab)
- Exponentiation assignment (opens in a new tab)
- Remainder assignment (opens in a new tab)
- Increment (opens in a new tab)
- Decrement (opens in a new tab)
- Conditional (ternary) operator (opens in a new tab)
- typeof (opens in a new tab)
- Destructuring assignment (opens in a new tab)
- Spread syntax (opens in a new tab)
- if...else (opens in a new tab)
- switch (opens in a new tab)
- while (opens in a new tab)
- do...while (opens in a new tab)
- for (opens in a new tab)
- break (opens in a new tab)
- continue (opens in a new tab)
- Functions (opens in a new tab)
- Arrow function expressions (opens in a new tab)
- Default parameters (opens in a new tab)
- Rest parameters (opens in a new tab)
- Scope (opens in a new tab)
- throw (opens in a new tab)
- try...catch (opens in a new tab)
JS02 - JavaScript Basic Data Structures
Complexity
Junior
Timeframe
3h
Summary
You should understand the most important JavaScript data structures (strings, arrays, objects, maps and sets) in depth.
Skill Breakdown
You should understand strings beyond the basic familiarity that is required in JS01:
- string literals (already covered in JS01)
- concatenating strings with
+(already covered in JS01) - getting string length using the
lengthproperty (already covered in JS01) - accessing string characters with
charAtand[] - important string methods:
- concat
- includes
- startsWith
- endsWith
- indexOf
- lastIndexOf
- substring
- toLowerCase
- toUpperCase
- trim
- split
You should understand arrays beyond the basic familiarity that is required in JS01:
- array literals (already covered in JS01)
- accessing array length using the
lengthproperty (already covered in JS01) - accessing array elements using
[](already covered in JS01) - important array methods:
- Array.isArray
- Array.from
- Array.of
- concat
- includes
- indexOf
- lastIndexOf
- join
- push
- pop
- reverse
- nested arrays and the flat method
You should understand how to use the for...of loop to iterate over arrays and strings.
You should understand objects beyond the basic familiarity that is required in JS01:
- object literals (already covered in JS01)
- working with object properties (already covered in JS01)
- important object methods:
- Object.keys
- Object.values
- Object.entries
You should understand how to use the for...in loop to over the properties of an object.
You should understand maps:
- creating maps
- getting map size using the
sizeproperty - important map methods:
- set
- get
- delete
- has
You should understand the differences between maps and regular objects.
You should understand sets:
- creating sets
- getting set size using the
sizeproperty - important set methods:
- add
- delete
- has
Required Resources
Getting Things Done in Next.js:
Optional Resources
MDN JavaScript Guide:
- Indexed collections (opens in a new tab)
- Keyed collections (opens in a new tab)
- Working with objects (opens in a new tab)
MDN JavaScript Reference & Glossary:
- String (opens in a new tab)
- String: length (opens in a new tab)
- String.prototype.charAt() (opens in a new tab)
- String.prototype.concat() (opens in a new tab)
- String.prototype.includes() (opens in a new tab)
- String.prototype.startsWith() (opens in a new tab)
- String.prototype.endsWith() (opens in a new tab)
- String.prototype.indexOf() (opens in a new tab)
- String.prototype.lastIndexOf() (opens in a new tab)
- String.prototype.substring() (opens in a new tab)
- String.prototype.toLowerCase() (opens in a new tab)
- String.prototype.toUpperCase() (opens in a new tab)
- String.prototype.trim() (opens in a new tab)
- String.prototype.sp ush() (opens in a new tab)
- Array.prototype.pop() (opens in a new tab)
- Array.prototype.reverse() (opens in a new tab)
- Array.prototype.flat() (opens in a new tab)
- for..of (opens in a new tab)
- Object (opens in a new tab)
- Object.keys() (opens in a new tab)
- Object.values() (opens in a new tab)
- Object.entries() (opens in a new tab)
- for...in (opens in a new tab)
- Map (opens in a new tab)
- Map.prototype.set() (opens in a new tab)
- Map.prototype.get() (opens in a new tab)
- Map.prototype.delete() (opens in a new tab)
- Map.prototype.has() (opens in a new tab)
- Set (opens in a new tab)
- Set.prototype.add() (opens in a new tab)
- Set.prototype.delete() (opens in a new tab)
- Set.prototype.has() (opens in a new tab)
JS03 - JavaScript Functional Programming
Complexity
Junior
Timeframe
3h
Summary
You should be understand how to use map, filter, reduce and other higher-order functions to write programs in a functional style.
Skill Breakdown
You should understand the theoretical concepts behind functional programming:
- pure functions
- immutability
- higher-order functions
You should be able to use important higher-order functions on arrays:
- map
- filter
- reduce
- find
- findIndex
- every
- some
- forEach
- sort
Required Resources
Getting Things Done in Next.js:
Optional Resources
MDN JavaScript Guide:
MDN JavaScript Reference & Glossary:
- Array.prototype.map() (opens in a new tab)
- Array.prototype.filter() (opens in a new tab)
- Array.prototype.reduce() (opens in a new tab)
- Array.prototype.find() (opens in a new tab)
- Array.prototype.findIndex() (opens in a new tab)
- Array.prototype.every() (opens in a new tab)
- Array.prototype.some() (opens in a new tab)
- Array.prototype.forEach() (opens in a new tab)
- Array.prototype.sort() (opens in a new tab)
JS04 - JavaScript Asynchronous Programming Basics
Complexity
Junior
Timeframe
4h
Summary
You should be understand the basics behind promises and async/await. You should know how to correctly send a network request.
Skill Breakdown
You should understand the main idea behind asynchronous programming (handle a long-running operation without blocking the program).
You should understand promises.
You should understand the different states of promises:
- pending
- fulfilled
- rejected
- settled
You should understand promise chaining and how to use the then method.
You should know how to catch errors using the catch method.
You should know how to correctly send a network request using fetch (with the correct error handling).
You should understand the async/await and how to translate promise chains into async/await code.
Required Resources
Getting Things Done in Next.js:
Optional Resources
MDN JavaScript Guide:
MDN JavaScript Reference & Glossary:
- Promise (opens in a new tab)
- Promise.prototype.then() (opens in a new tab)
- Promise.prototype.catch() (opens in a new tab)
- async function (opens in a new tab)
- await (opens in a new tab)
JS05 - JavaScript ES Modules
Complexity
Junior
Timeframe
1h
Summary
You should understand ESM and how to structure programs in an efficient manner.
Skill Breakdown
You should understand how to use named exports and imports:
- creating a named export using the
exportkeyword - creating named exports using export lists
- creating a named import using the
importkeyword - renaming named imports
You should understand how to use default exports and imports:
- creating a default export using the
exportkeyword - creating a default import using the
importkeyword
You should understand how to use namespace imports.
You should understand how to setup ESM in both the browser and Node.js.
You should understand how to create JavaScript packages, how to work with dependencies and how to create scripts.
Required Resources
Getting Things Done in Next.js:
Optional Resources
MDN JavaScript Guide:
MDN JavaScript Reference & Glossary:
JS06 - JavaScript Practical Coding
Complexity
Junior
Timeframe
1h
Summary
You should be able to apply basic guidelines to write readable and maintainable code:
- use meaningful names for variables and functions
- simplify complex functions by using small helper functions
- make functions reusable
- utilize language featues to write good code
- avoid deep nesting
- avoid repetition
- think about edge cases
You should understand the basic principles of keeping your code maintainable as the project grows.
Required Resources
Getting Things Done in Next.js:
Optional Resources
There are no optional resources for this skill.
JS07 - JavaScript Classes
Complexity
Middle
Timeframe
3h
Summary
You should understand how classes work and know about the types of class elements along with their modifiers.
Skill Breakdown
You should understand how to write create new classes using class declarations and class expressions.
You should understand how to write constructors and to create objects from a class.
You should know how to create instance methods on classes.
You should understand fields:
- public fields
- private fields
- accessor fields with
getandset
You should understand static properties:
- static methods
- static fields
You should know how to create static initialization blocks.
Required Resources
MDN JavaScript Guide:
Optional Resources
MDN JavaScript Reference & Glossary:
- Overview (opens in a new tab)
- class (opens in a new tab)
- constructor (opens in a new tab)
- Method definitions (opens in a new tab)
- Public class fields (opens in a new tab)
- Private properties (opens in a new tab)
- get (opens in a new tab)
- set (opens in a new tab)
- static (opens in a new tab)
- Static initialization blocks (opens in a new tab)
JS08 - JavaScript Inheritance
Complexity
Middle
Timeframe
3h
Summary
You should understand inheritance and the prototype chain.
Skill Breakdown
You should understand the basic idea behind inheritance.
You should know how to create and work with derived classes:
- creating a derived class using the
extendskeyword - using
super()inside the constructor - inheriting and overriding methods from the parent class
- using
superto access methods from the parent class
You should know understand that JavaScript doesn't have multiple inheritance.
You should understand the prototype chain:
- object prototypes
- own properties
- getting object prototypes with
Object.getPrototypeOf() - setting prototypes of new objects with
Object.create() - prototypes of prototypes and the prototype chain
Required Resources
MDN JavaScript Guide:
MDN JavaScript - Dynamic client-side scripting:
MDN JavaScript Advanced Tutorial:
Optional Resources
- extends (opens in a new tab)
- super (opens in a new tab)
- Object.getPrototypeOf() (opens in a new tab)
- Object.create() (opens in a new tab)
JS09 - JavaScript Buffers and Views
Complexity
Middle
Timeframe
3h
Summary
You should understand how to work with buffers and views and how typed arrays fit into the picture. You should be able to process binary data like audio and video using buffers and views.
Skill Breakdown
You should understand buffers:
- the general idea behind buffers
ArrayBuffer- Node.js
Buffer
You should understand views:
- typed arrays
- different typed array types:
Int8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64Array
DataView
You should understand blobs.
You should understand how to obtain array buffers from common JavaScript objects:
- using the
arrayBuffermethod of theResponseobject - using the
arrayBuffermethod of theBlobobject
Required Resources
MDN JavaScript Guide:
- JavaScript typed arr method (opens in a new tab)
- Response: blob() method (opens in a new tab)
- Response: arrayBuffer() method (opens in a new tab)
Optional Resources
MDN JavaScript Reference & Glossary:
- ArrayBuffer (opens in a new tab)
- DataView (opens in a new tab)
- Int8Array (opens in a new tab)
- Uint8Array (opens in a new tab)
- Uint8ClampedArray (opens in a new tab)
- Int16Array (opens in a new tab)
- Uint16Array (opens in a new tab)
- Int32Array (opens in a new tab)
- Uint32Array (opens in a new tab)
- Float32Array (opens in a new tab)
- Float64Array (opens in a new tab)
Node.js documentation:
JS10 - JavaScript Iterators and Iterables
Complexity
Middle
Timeframe
2h
Summary
You should understand how JavaScript iterators, iterables and generators work.
Skill Breakdown
You should understand the concept of an iterator:
- iterator protocol and the
next()method - terminating an iterator
You should understand the concept of an iterable:
- iterables define iteration behaviour
- implementing the
Symbol.iteratormethod
You should understand the concept of a generator:
- writing generator functions using the
function*keyword - using
yieldto return the next value
You should know how that certain JavaScript constructs like the for...of loop are based on these concepts.
Required Resources
MDN JavaScript Guide:
Optional Resources
MDN JavaScript Reference & Glossary:
JS11 - Regular Expressions
Complexity
Middle
Timeframe
3h
Summary
You should be able to write simple Regular Expressions and have an understanding of when they are useful and when they are not useful.
Skill Breakdown
You should understand the idea behind regular expressions.
You should know how to construct regular expressions:
- using regular expression literals
- using the
RegExpobject
You should know how to write regular expression patterns:
- literal characters
- character classes:
[xyz]and[a-c]to match any of the enclosed characters[^xyz]and[^a-c]for negated (complemented) character classes\dto match digits\Dto match non-digits\wto match alphanumeric characters\Wto match non-alphanumeric characters\sto match whitespace\Sto match non-whitespace
- wildcards:
.to match all characters
- quantifiers:
*to match 0 or more times+to match 1 or more times?to match 0 or 1 times{n}to match exactly n times{n,}to match at least n times{n,m}to match between n and m times- using
?for non-greedy matches
- disjunctions:
|to specify multiple alternatives
- assertions:
^to match beginning of input$to match end of input\bto match word boundaries\Bto match non-word boundaries
- groups:
(x)for capturing groups(?<Name>x)for named capturing groups(?:x)for non-capturing groups
- backreferences:
\nfor backreferences to capturing groups\k<Name>for backreferences to named capturing groups
You should be able to use the most important methods of the RegExp object:
testexec
You should be able to use the most important method of the String object that works with regular expressions:
matchmatchAllreplacereplaceAllsearchsplit
You should understand the most important flags:
gflagiflagmflagsflag
Required Resources
MDN JavaScript Guide:
- Regular expressions (opens in a new tab)
- Character classes (opens in a new tab)
- Quantifiers (opens in a new tab)
- Assertions (opens in a new tab)
- Groups and backreferences (opens in a new tab)
MDN JavaScript Reference & Glossary:
Optional Resources
MDN JavaScript Reference & Glossary:
- Regular expressions (opens in a new tab)
- Literal character (opens in a new tab)
- Character class (opens in a new tab)
- Character class escape (opens in a new tab)
- Quantifier (opens in a new tab)
- Input boundary assertion (opens in a new tab)
- Word boundary assertion (opens in a new tab)
- Capturing group (opens in a new tab)
- Named capturing group (opens in a new tab)
- Non-capturing group (opens in a new tab)
- Backreference (opens in a new tab)
- Named backreference (opens in a new tab)
- RegExp (opens in a new tab)
- RegExp.prototype.exec() (opens in a new tab)
- RegExp.prototype.test() (opens in a new tab)
- String.prototype.match() (opens in a new tab)
- String.prototype.matchAll() (opens in a new tab)
- String.prototype.replace() (opens in a new tab)
- String.prototype.replaceAll() (opens in a new tab)
- String.prototype.search() (opens in a new tab)
- String.prototype.split() (opens in a new tab)