Home / Notebooks / JavaScript
JavaScript
beginner

JavaScript Basics

Essential JavaScript concepts and syntax for beginners

March 10, 2024
Updated regularly

JavaScript Basics

Quick reference guide for JavaScript fundamentals.

Variables and Data Types

JavaScript has three ways to declare variables:

// ========== Variable Declarations ==========
var oldWay = "avoid using var";     // Function-scoped (legacy)
let count = 10;                     // Block-scoped, can reassign
const PI = 3.14159;                 // Block-scoped, cannot reassign

// ========== Numbers ==========
let age = 25;                       // Integer
let price = 19.99;                  // Float (no separate type)
let distance = 1e6;                 // Scientific notation (1,000,000)
let infinity = Infinity;            // Special number value
let notANumber = NaN;               // "Not a Number"

// ========== Strings ==========
let name = "Yudi";                  // Double quotes
let message = 'Hello!';             // Single quotes (same as double)
let template = `Hello, ${name}!`;   // Template literals (with interpolation)
let multiline = `
This is a
multi-line string
`;

// ========== Booleans ==========
let isActive = true;                // lowercase true/false
let hasPermission = false;

// ========== Arrays (ordered, mutable) ==========
let fruits = ["apple", "banana", "orange"];
let mixed = [1, "two", 3.0, true];  // Can mix types
let empty = [];

// ========== Objects (key-value pairs) ==========
let person = {
    name: "Yudi",
    age: 25,
    city: "Jakarta",
    "full name": "Yudi Nugraha"     // Keys with spaces need quotes
};
// Access: person.name or person["name"] → "Yudi"

// ========== Special Values ==========
let notDefined = undefined;         // Variable declared but not assigned
let empty = null;                   // Intentional absence of value

Type Checking and Conversion

// ========== Type Checking ==========
typeof 42;                          // "number"
typeof "hello";                     // "string"
typeof true;                        // "boolean"
typeof undefined;                   // "undefined"
typeof null;                        // "object" (JavaScript quirk!)
typeof [];                          // "object"
typeof {};                          // "object"

// Better array check
Array.isArray([]);                  // true
Array.isArray({});                  // false

// ========== Type Conversion ==========
// To Number
Number("123");                      // 123
parseInt("123");                    // 123
parseFloat("123.45");               // 123.45
+"123";                             // 123 (unary plus)

// To String
String(123);                        // "123"
(123).toString();                   // "123"
123 + "";                           // "123"

// To Boolean
Boolean(1);                         // true
Boolean(0);                         // false
Boolean("");                        // false
Boolean("hello");                   // true
!!"hello";                          // true (double negation)

Operators

// ========== Arithmetic ==========
let sum = 5 + 3;                    // 8
let difference = 5 - 3;             // 2
let product = 5 * 3;                // 15
let quotient = 15 / 3;              // 5
let remainder = 10 % 3;             // 1 (modulo)
let power = 2 ** 3;                 // 8 (exponentiation)

// ========== Comparison ==========
5 == "5";                           // true (loose equality, converts types)
5 === "5";                          // false (strict equality, no conversion)
5 != "5";                           // false
5 !== "5";                          // true (strict inequality)
5 > 3;                              // true
5 >= 5;                             // true

// ========== Logical ==========
true && false;                      // false (AND)
true || false;                      // true (OR)
!true;                              // false (NOT)

// ========== Assignment ==========
let x = 10;
x += 5;                             // x = x + 5 → 15
x -= 3;                             // x = x - 3 → 12
x *= 2;                             // x = x * 2 → 24
x /= 4;                             // x = x / 4 → 6

// ========== Ternary (shorthand if) ==========
let status = age >= 18 ? "adult" : "minor";

Control Flow

If Statements

let age = 18;

if (age >= 18) {
    console.log("Adult");
} else if (age >= 13) {
    console.log("Teenager");
} else {
    console.log("Child");
}

// Switch statement
let day = "Monday";
switch (day) {
    case "Monday":
        console.log("Start of week");
        break;
    case "Friday":
        console.log("End of week");
        break;
    default:
        console.log("Midweek");
}

Loops

// ========== For Loop ==========
for (let i = 0; i < 5; i++) {
    console.log(i);
}

// ========== While Loop ==========
let count = 0;
while (count < 5) {
    console.log(count);
    count++;
}

// ========== Do-While Loop ==========
let x = 0;
do {
    console.log(x);
    x++;
} while (x < 5);

// ========== For...of (iterate values) ==========
let fruits = ["apple", "banana", "orange"];
for (let fruit of fruits) {
    console.log(fruit);
}

// ========== For...in (iterate keys/indices) ==========
let person = { name: "Yudi", age: 25 };
for (let key in person) {
    console.log(key, person[key]);
}

// ========== forEach (array method) ==========
fruits.forEach((fruit, index) => {
    console.log(index, fruit);
});

Functions

// ========== Function Declaration ==========
function greet(name) {
    return `Hello, ${name}!`;
}

// ========== Function Expression ==========
const add = function(a, b) {
    return a + b;
};

// ========== Arrow Function (ES6+) ==========
const multiply = (a, b) => a * b;           // Implicit return
const square = x => x * x;                  // Single param, no parens needed
const sayHi = () => console.log("Hi!");     // No params

// ========== Default Parameters ==========
function power(base, exponent = 2) {
    return base ** exponent;
}

// ========== Rest Parameters ==========
function sumAll(...numbers) {
    return numbers.reduce((sum, num) => sum + num, 0);
}

// ========== Calling Functions ==========
let message = greet("Yudi");                // "Hello, Yudi!"
let result = add(5, 3);                     // 8
let squared = power(5);                     // 25 (uses default exponent=2)
let total = sumAll(1, 2, 3, 4, 5);          // 15

Array Methods

Modern JavaScript has powerful array methods:

let numbers = [1, 2, 3, 4, 5];

// ========== Map (transform each element) ==========
let doubled = numbers.map(n => n * 2);
// Result: [2, 4, 6, 8, 10]

// ========== Filter (keep elements that match condition) ==========
let evens = numbers.filter(n => n % 2 === 0);
// Result: [2, 4]

// ========== Reduce (combine into single value) ==========
let sum = numbers.reduce((acc, n) => acc + n, 0);
// Result: 15

// ========== Find (get first match) ==========
let found = numbers.find(n => n > 3);
// Result: 4

// ========== Some (check if any match) ==========
let hasEven = numbers.some(n => n % 2 === 0);
// Result: true

// ========== Every (check if all match) ==========
let allPositive = numbers.every(n => n > 0);
// Result: true

// ========== Sort ==========
let sorted = numbers.sort((a, b) => b - a);
// Result: [5, 4, 3, 2, 1] (descending)

// ========== Chaining Methods ==========
let result = numbers
    .filter(n => n % 2 === 0)
    .map(n => n * 2)
    .reduce((acc, n) => acc + n, 0);
// Result: 12 (filter evens [2,4], double [4,8], sum 12)

Object Operations

let person = {
    name: "Yudi",
    age: 25,
    city: "Jakarta"
};

// ========== Access Properties ==========
person.name;                        // "Yudi" (dot notation)
person["age"];                      // 25 (bracket notation)

// ========== Add/Update Properties ==========
person.email = "yudi@example.com";
person.age = 26;

// ========== Delete Properties ==========
delete person.city;

// ========== Object Methods ==========
Object.keys(person);                // ["name", "age", "email"]
Object.values(person);              // ["Yudi", 26, "yudi@example.com"]
Object.entries(person);             // [["name", "Yudi"], ["age", 26], ...]

// ========== Destructuring ==========
let { name, age } = person;         // Extract properties to variables
let { name: fullName } = person;    // Rename during destructuring

// ========== Spread Operator ==========
let clone = { ...person };          // Shallow copy
let updated = { ...person, age: 27 }; // Copy and update

// ========== Object Shorthand ==========
let name = "Yudi";
let age = 25;
let user = { name, age };           // Same as { name: name, age: age }

// ========== Method Shorthand ==========
let calculator = {
    add(a, b) {                     // Shorthand method
        return a + b;
    }
};

String Methods

let text = "Hello, World!";

// ========== Case Conversion ==========
text.toLowerCase();                 // "hello, world!"
text.toUpperCase();                 // "HELLO, WORLD!"

// ========== Search ==========
text.includes("World");             // true
text.startsWith("Hello");           // true
text.endsWith("!");                 // true
text.indexOf("World");              // 7 (position)

// ========== Extraction ==========
text.slice(0, 5);                   // "Hello"
text.substring(7, 12);              // "World"
text.split(", ");                   // ["Hello", "World!"]

// ========== Modification ==========
text.replace("World", "JavaScript"); // "Hello, JavaScript!"
text.trim();                        // Remove whitespace from ends
text.padStart(20, "-");             // "-------Hello, World!"

// ========== Template Literals ==========
let name = "Yudi";
let age = 25;
let message = `My name is ${name} and I'm ${age} years old.`;

Modern JavaScript Features (ES6+)

// ========== Destructuring Arrays ==========
let [first, second, ...rest] = [1, 2, 3, 4, 5];
// first = 1, second = 2, rest = [3, 4, 5]

// ========== Default Values ==========
let { name = "Anonymous", age = 0 } = {};
// name = "Anonymous", age = 0

// ========== Optional Chaining ==========
let user = { profile: { name: "Yudi" } };
user?.profile?.name;                // "Yudi"
user?.address?.street;              // undefined (no error)

// ========== Nullish Coalescing ==========
let value = null ?? "default";      // "default"
let value2 = 0 ?? "default";        // 0 (only null/undefined trigger ??)

// ========== Promise (async handling) ==========
fetch("https://api.example.com/data")
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));

// ========== Async/Await ==========
async function getData() {
    try {
        const response = await fetch("https://api.example.com/data");
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
    }
}

Common Patterns

// ========== Check if value exists ==========
if (value !== null && value !== undefined) {
    // Do something
}
// Shorthand:
if (value != null) { }              // Only null and undefined are falsy

// ========== Default value ==========
function greet(name) {
    name = name || "Guest";         // Old way
    name = name ?? "Guest";         // Modern way (better)
    return `Hello, ${name}!`;
}

// ========== Guard clauses (early return) ==========
function processUser(user) {
    if (!user) return;              // Exit early
    if (!user.isActive) return;
    
    // Main logic here
    console.log("Processing", user.name);
}

// ========== Array deduplication ==========
let numbers = [1, 2, 2, 3, 3, 4];
let unique = [...new Set(numbers)]; // [1, 2, 3, 4]

// ========== Object property existence ==========
let obj = { name: "Yudi" };
"name" in obj;                      // true
obj.hasOwnProperty("name");         // true

Tips

  • Use const by default, let only when reassignment needed
  • Never use var in modern JavaScript
  • Use === instead of == for comparisons
  • Prefer arrow functions for callbacks
  • Use template literals for string interpolation
  • Learn array methods (map, filter, reduce)
  • Handle errors with try/catch for async code
  • Use meaningful variable and function names
  • Resources

  • MDN Web Docs
  • JavaScript.info
  • Eloquent JavaScript
  • You Don't Know JS
  • Topics

    JavaScriptProgrammingBasicsWeb Development

    Found This Helpful?

    If you have questions or suggestions for improving these notes, I'd love to hear from you.