PROGRAMMING COURSE
One complete JavaScript course: the language itself, then the browser — the DOM, events, fetch, storage, and the async model everything else is built on.
const message = "Hello from JavaScript";
console.log(message);COURSE CURRICULUM
Work through a section at a time, or jump straight to the concept you need.
Tell apart the JavaScript language from the runtime that hosts it, and predict which globals exist in a browser tab but not in Node.js.
Set up a plain-text code editor and open the browser console, run expressions at the prompt, and tell an echoed result apart from console.log output.
Write a working HTML page that runs JavaScript from an inline <script> and an external file, and predict the order each script executes in.
Predict exactly where JavaScript ends a statement, so you can tell a harmless missing semicolon from one that silently changes your code's meaning.
You can write both JavaScript comment forms, predict exactly what the engine discards, and use comments and naming so a file explains its own decisions.
Split any red console error into its name, message, and stack trace, and use each part to decide what broke and which line to open first.
Predict exactly when assigning, copying, or passing a value shares one object and when it duplicates data, and tell mutation apart from reassignment.
Name all seven primitive types, say what a number and a string actually store, and predict the limits those representations impose.
Predict what typeof returns for every kind of JavaScript value, and recognise the cases where its answer is too coarse or too forgiving to trust.
Distinguish undefined from null by origin and behaviour, predict when defaults and ?? fire, and choose the right one for empty fields in your own data.
Recognize where NaN comes from, detect it with Number.isNaN instead of equality, and spot float results that are wrong without ever becoming NaN.
Convert any value to a number, string, or boolean on purpose with Number(), String(), and Boolean(), and predict what each returns for messy input.
Predict what JavaScript does when an operator gets the wrong type, by tracing the operator's required type and each operand's trip through ToPrimitive.
Predict the result of any == or === comparison by tracking the one conversion step that == adds, and know when each operator is the right tool.
Predict how any value behaves in an if, ternary, or logical operator by recalling JavaScript's eight falsy values and writing the test you actually mean.
Control how your objects convert to primitives with toString, valueOf, and Symbol.toPrimitive, and predict which one a given operator calls.
Declare JavaScript variables with var, let, and const, choose the right keyword, and tell an unset binding from one that was never declared.
You can pinpoint which function a var belongs to, predict its value outside the block it was written in, and fix loops whose closures share one counter.
Reason about where a let or const name is visible, shadow names safely inside nested blocks, and use per-iteration loop bindings on purpose.
You can tell reassignment, redeclaration, and mutation apart, predict whether a failure is a TypeError or a SyntaxError, and know what const really protects.
Diagnose and fix 'Cannot access X before initialization' by reasoning about when a let or const binding becomes usable.
Predict what a name holds before its declaration line by reading each scope as bindings first, statements second.
Pick JavaScript naming styles (camelCase, PascalCase, SCREAMING_SNAKE_CASE) that tell a reader what a binding is and whether its value is fixed.
Use JavaScript's arithmetic operators with confidence, and use % to wrap counters, split totals into units, and test divisibility without sign surprises.
Use = and the compound operators, from += to ??=, knowing what each one reads, when it writes, and which base operator's rules it inherits.
Predict the result of any JavaScript comparison by knowing when an operator converts its operands and when it compares types directly.
Predict the value and type that &&, || and ! produce in JavaScript, and know exactly which operand never gets evaluated.
Use ?? and ??= to write defaults that fire only for null or undefined, so deliberate 0, "" and false values survive.
Read deeply nested values and call maybe-missing methods with ?., knowing exactly which links short-circuit to undefined and which still throw.
Use the conditional operator to pick values inline, flatten multi-case decisions into a flat else-chain, and know when to switch to if or a lookup.
Use JavaScript's bitwise operators on flag sets, packed integers and binary data, and know exactly where the 32-bit conversion makes bit tricks wrong.