Understanding Nested if...else in JavaScript
This article is a complementary resource to the Learn JavaScript Basics course.
This article is a complementary resource to the Learn JavaScript Basics course.
A nested if...else
statement is when one if...else
statement exists inside another. For example,
// Program to check if number is even, odd, or negative
let number = parseInt(prompt("Enter a number: "));
// Outer if...else statement
if (number > 0) {
// Inner if...else statement
if (number % 2 === 0) {
console.log("The number is even.");
} else {
console.log("The number is odd.");
}
} else {
console.log("The number is negative.");
}
Output
Enter a number: 10 The number is even.
Here's how the above program works:
Outer if...else
Statement:
number > 0
).true
, it moves to the inner if...else
statement.false
, it executes the else block, printing "The number is negative."
.Inner if...else
Statement:
number % 2 === 0
).true
, it prints "The number is even."
."The number is odd."
.Nested if...else
statements are not inherently bad, but they can make your code harder to read and maintain. For example,
// Program to find the largest of three numbers
let number1 = parseInt(prompt("Enter the first number:"));
let number2 = parseInt(prompt("Enter the second number:"));
let number3 = parseInt(prompt("Enter the third number:"));
if (number1 > number2) {
if (number1 > number3) {
console.log(`The largest number is ${number1}`);
} else {
console.log(`The largest number is ${number3}`);
}
} else {
if (number2 > number3) {
console.log(`The largest number is ${number2}`);
} else {
console.log(`The largest number is ${number3}`);
}
}
The code works as expected. But, the nested if...else
structure makes the code harder to read.
Imagine extending the logic of the above program to find the largest of four numbers. The code becomes increasingly unreadable. For example,
// Program to find the largest of four numbers
let num1 = parseInt(prompt("Enter the first number: "));
let num2 = parseInt(prompt("Enter the second number: "));
let num3 = parseInt(prompt("Enter the third number: "));
let num4 = parseInt(prompt("Enter the fourth number: "));
if (num1 > num2) {
if (num1 > num3) {
if (num1 > num4) {
console.log(`The largest number is: ${num1}`);
} else {
console.log(`The largest number is: ${num4}`);
}
} else {
if (num3 > num4) {
console.log(`The largest number is: ${num3}`);
} else {
console.log(`The largest number is: ${num4}`);
}
}
} else {
if (num2 > num3) {
if (num2 > num4) {
console.log(`The largest number is: ${num2}`);
} else {
console.log(`The largest number is: ${num4}`);
}
} else {
if (num3 > num4) {
console.log(`The largest number is: ${num3}`);
} else {
console.log(`The largest number is: ${num4}`);
}
}
}
You can avoid deep nesting by using logical operators like &&
and ||
.
For example, here's a better way to find the largest of three numbers:
// Program to find the largest of three numbers
let number1 = parseInt(prompt("Enter the first number: "));
let number2 = parseInt(prompt("Enter the second number: "));
let number3 = parseInt(prompt("Enter the third number: "));
if (number1 > number2 && number1 > number3) {
console.log(`The largest number is ${number1}`);
} else if (number2 > number3) {
console.log(`The largest number is ${number2}`);
} else {
console.log(`The largest number is ${number3}`);
}
Here, using the &&
operator allows us to avoid unnecessary nesting, making the code easier to read and maintain.
if...else
statements can handle dependent conditions but can make your code messy if overused.&&
and ||
.