Programming languages come and go, but the concepts underneath them stay the same. Variables, data types, control flow, loops, functions, and data structures exist in every general-purpose programming language — from C written in 1972 to Python written today. The syntax changes; the ideas do not.
Understanding these concepts as language-agnostic fundamentals rather than JavaScript-specific facts is one of the most important shifts a developer can make. Once you see them that way, learning a new language becomes a matter of learning new syntax — not new concepts. You are not starting from scratch; you are translating.
This topic uses JavaScript and Python side by side to make this concrete. Both are widely used, readable languages that handle these concepts slightly differently — seeing them together makes the universality of the concepts unmistakable.
Variables
A variable is a named container for storing a value. Every language has them. What differs is how you declare them and how strictly the language enforces their types.
| JavaScript | Python | |
|---|---|---|
| Declaration | let, const, var keywords required | No keyword — just assign |
| Reassignment | let allows it; const does not | Always allowed |
| Constants | const name = "value" | Convention: NAME = "value" (uppercase) |
JavaScript:
let age = 25;
const name = "Wariz";
age = 26; // ✅ allowed
name = "Ali"; // ❌ TypeError — const cannot be reassigned
Python:
age = 25
name = "Wariz"
age = 26 # ✅ allowed
NAME = "Wariz" # Convention for constants — Python doesn't enforce it
The concept — naming a memory location to store and retrieve a value — is identical. Only the declaration syntax differs.
Data Types
Every value in a program has a type. The type determines what kind of data is stored and what operations can be performed on it. The same core types exist in virtually every language.
Primitive types
| Type | Description | JavaScript | Python |
|---|---|---|---|
| Integer | Whole numbers | 42 (part of number) | 42 |
| Float | Decimal numbers | 3.14 (part of number) | 3.14 |
| String | Text | "hello" | "hello" |
| Boolean | True or false | true / false | True / False |
| Null / None | Intentional absence of value | null | None |
| Undefined | Declared but not assigned | undefined | No equivalent |
JavaScript combines integers and floats into a single number type. Python treats them as separate types (int and float). The distinction matters for how arithmetic behaves, but the concept — a type representing a numeric value — is the same.
JavaScript:
let score = 100; // number (integer)
let price = 9.99; // number (float)
let message = "hello"; // string
let isActive = true; // boolean
let nothing = null; // null
Python:
score = 100 # int
price = 9.99 # float
message = "hello" # str
is_active = True # bool
nothing = None # NoneType
Checking the type
JavaScript:
typeof 42 // "number"
typeof "hello" // "string"
typeof true // "boolean"
Python:
type(42) # <class 'int'>
type("hello") # <class 'str'>
type(True) # <class 'bool'>
Operators
Operators perform operations on values. Every language has the same fundamental categories.
Arithmetic operators
| Operation | JavaScript | Python |
|---|---|---|
| Addition | 5 + 3 → 8 | 5 + 3 → 8 |
| Subtraction | 5 - 3 → 2 | 5 - 3 → 2 |
| Multiplication | 5 * 3 → 15 | 5 * 3 → 15 |
| Division | 10 / 3 → 3.333 | 10 / 3 → 3.333 |
| Integer division | 10 / 3 → 3.333 (no built-in) | 10 // 3 → 3 |
| Modulo (remainder) | 10 % 3 → 1 | 10 % 3 → 1 |
| Exponentiation | 2 ** 3 → 8 | 2 ** 3 → 8 |
Comparison operators
| Operation | JavaScript | Python |
|---|---|---|
| Equal | === | == |
| Not equal | !== | != |
| Greater than | > | > |
| Less than | < | < |
| Greater or equal | >= | >= |
| Less or equal | <= | <= |
JavaScript has both == (loose equality, type coercion) and === (strict equality). Python only has ==, which always compares both value and type — closer in behaviour to JavaScript's ===.
Logical operators
| Operation | JavaScript | Python |
|---|---|---|
| AND | && | and |
| OR | || | or |
| NOT | ! | not |
JavaScript:
true && false // false
true || false // true
!true // false
Python:
True and False # False
True or False # True
not True # False
Same logic, different syntax. Python uses English words; JavaScript uses symbols.
Control Flow
Control flow determines which code runs and when, based on conditions.
if / else if / else
JavaScript:
let age = 20;
if (age < 18) {
console.log("Minor");
} else if (age < 21) {
console.log("Young adult");
} else {
console.log("Adult");
}
Python:
age = 20
if age < 18:
print("Minor")
elif age < 21:
print("Young adult")
else:
print("Adult")
Key differences:
- JavaScript wraps conditions in parentheses
()and uses curly braces{}for blocks. Python uses a colon:and indentation. - JavaScript uses
else if; Python useselif. - The logic is identical.
Switch / Match
JavaScript uses switch; Python 3.10+ introduced match (structural pattern matching):
JavaScript:
let day = 3;
switch (day) {
case 1: console.log("Monday"); break;
case 2: console.log("Tuesday"); break;
case 3: console.log("Wednesday"); break;
default: console.log("Other");
}
Python:
day = 3
match day:
case 1: print("Monday")
case 2: print("Tuesday")
case 3: print("Wednesday")
case _: print("Other")
Python's _ in match is the equivalent of default in JavaScript's switch.
Loops and Iteration
Loops repeat a block of code. Every language has at least two fundamental loop types: one for iterating a known number of times and one for repeating while a condition holds.
for loop
JavaScript:
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
Python:
for i in range(5):
print(i) # 0, 1, 2, 3, 4
JavaScript's for loop has three components (initialiser, condition, increment). Python's for loop iterates directly over a sequence — range(5) generates the numbers 0 through 4.
Iterating over a list / array
JavaScript:
const fruits = ["apple", "banana", "cherry"];
for (const fruit of fruits) {
console.log(fruit);
}
Python:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
while loop
JavaScript:
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
Python:
i = 0
while i < 5:
print(i)
i += 1
Python has no ++ or -- operators. Use += 1 instead.
break and continue
Both languages use the same keywords:
JavaScript:
for (let i = 0; i < 10; i++) {
if (i === 5) break; // exit the loop
if (i % 2 === 0) continue; // skip even numbers
console.log(i);
}
Python:
for i in range(10):
if i == 5:
break # exit the loop
if i % 2 == 0:
continue # skip even numbers
print(i)
Functions
A function is a named, reusable block of code that takes inputs (parameters), performs a task, and optionally returns an output. Functions exist in every language — the concept is universal.
Defining and calling a function
JavaScript:
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Wariz")); // Hello, Wariz!
Python:
def greet(name):
return f"Hello, {name}!"
print(greet("Wariz")) # Hello, Wariz!
JavaScript uses the function keyword and curly braces. Python uses def and indentation. Both use return to output a value.
Default parameters
JavaScript:
function greet(name = "Guest") {
return `Hello, ${name}!`;
}
Python:
def greet(name="Guest"):
return f"Hello, {name}!"
Identical concept, near-identical syntax.
Anonymous / Lambda functions
JavaScript (arrow function):
const double = (n) => n * 2;
console.log(double(5)); // 10
Python (lambda):
double = lambda n: n * 2
print(double(5)) # 10
Both languages support short anonymous functions. JavaScript's arrow functions are more capable than Python's lambdas — Python lambdas are limited to a single expression.
Data Structures
Data structures organise multiple values together. The same fundamental structures exist in every language.
Arrays / Lists
An ordered, indexed collection of values.
JavaScript:
const numbers = [1, 2, 3, 4, 5];
numbers.push(6); // Add to end
numbers.pop(); // Remove from end
console.log(numbers[0]); // 1 — zero-indexed
Python:
numbers = [1, 2, 3, 4, 5]
numbers.append(6) # Add to end
numbers.pop() # Remove from end
print(numbers[0]) # 1 — zero-indexed
Both are zero-indexed. Both support push/append for adding and pop for removing. The concept is identical.
Objects / Dictionaries
A collection of key-value pairs.
JavaScript (object):
const user = {
name: "Wariz",
age: 20,
role: "Developer"
};
console.log(user.name); // "Wariz"
console.log(user["age"]); // 20
Python (dictionary):
user = {
"name": "Wariz",
"age": 20,
"role": "Developer"
}
print(user["name"]) # "Wariz"
print(user.get("age")) # 20
JavaScript object keys can be unquoted identifiers. Python dictionary keys must be quoted strings (or other hashable types). Both support bracket notation for access.
Sets
An unordered collection of unique values.
JavaScript:
const unique = new Set([1, 2, 2, 3, 3]);
console.log(unique); // Set {1, 2, 3}
Python:
unique = {1, 2, 2, 3, 3}
print(unique) # {1, 2, 3}
Tuples (Python only)
Python has a built-in tuple type — an immutable, ordered collection. JavaScript has no direct equivalent (though const arrays are sometimes used similarly):
coordinates = (40.7128, -74.0060) # Cannot be changed after creation
The Universal Pattern
Looking across all of these concepts, the same pattern emerges in every language:
| Concept | Universal idea | What changes |
|---|---|---|
| Variables | Named containers for values | Declaration syntax, mutability rules |
| Data types | Categories of values with defined behaviours | Type names, how types are checked |
| Operators | Symbols that perform operations | Symbols vs. words (e.g. && vs. and) |
| Control flow | Conditional execution of code | Syntax for conditions and blocks |
| Loops | Repeating code based on a condition or sequence | Loop syntax, iteration model |
| Functions | Named, reusable blocks of code | Declaration keyword, indentation vs. braces |
| Data structures | Organised collections of values | Method names, literal syntax |
When you encounter a new language, you already know what to look for — you just need to find how that language expresses each concept. The concepts themselves are already familiar.