--- title: if...else slug: Web/JavaScript/Reference/Statements/if...else page-type: javascript-statement browser-compat: javascript.statements.if_else sidebar: jssidebar --- The **`if...else`** statement executes a statement if a specified condition is {{Glossary("truthy")}}. If the condition is {{Glossary("falsy")}}, another statement in the optional `else` clause will be executed. {{InteractiveExample("JavaScript Demo: if...else statement")}} ```js interactive-example function testNum(a) { let result; if (a > 0) { result = "positive"; } else { result = "NOT positive"; } return result; } console.log(testNum(-5)); // Expected output: "NOT positive" ``` ## Syntax ```js-nolint if (condition) statement1 // With an else clause if (condition) statement1 else statement2 ``` - `condition` - : An expression that is considered to be either {{Glossary("truthy")}} or {{Glossary("falsy")}}. - `statement1` - : Statement that is executed if _condition_ is {{Glossary("truthy")}}. Can be any statement, including further nested `if` statements. To execute multiple statements, use a [block](/en-US/docs/Web/JavaScript/Reference/Statements/block) statement (`{ /* ... */ }`) to group those statements. To execute no statements, use an [empty](/en-US/docs/Web/JavaScript/Reference/Statements/Empty) statement. - `statement2` - : Statement that is executed if `condition` is {{Glossary("falsy")}} and the `else` clause exists. Can be any statement, including block statements and further nested `if` statements. ## Description Multiple `if...else` statements can be nested to create an `else if` clause. Note that there is no `elseif` (in one word) keyword in JavaScript. ```js-nolint if (condition1) statement1 else if (condition2) statement2 else if (condition3) statement3 // … else statementN ``` To see how this works, this is how it would look if the nesting were properly indented: ```js-nolint if (condition1) statement1 else if (condition2) statement2 else if (condition3) statement3 // … ``` To execute multiple statements within a clause, use a block statement (`{ /* ... */ }`) to group those statements. ```js-nolint if (condition) { statements1 } else { statements2 } ``` Not using blocks may lead to confusing behavior, especially if the code is hand-formatted. For example: ```js-nolint example-bad function checkValue(a, b) { if (a === 1) if (b === 2) console.log("a is 1 and b is 2"); else console.log("a is not 1"); } ``` This code looks innocent — however, executing `checkValue(1, 3)` will log "a is not 1". This is because in the case of [dangling else](https://en.wikipedia.org/wiki/Dangling_else), the `else` clause will be connected to the closest `if` clause. Therefore, the code above, with proper indentation, would look like: ```js-nolint function checkValue(a, b) { if (a === 1) if (b === 2) console.log("a is 1 and b is 2"); else console.log("a is not 1"); } ``` In general, it is a good practice to always use block statements, especially in code involving nested `if` statements. ```js example-good function checkValue(a, b) { if (a === 1) { if (b === 2) { console.log("a is 1 and b is 2"); } } else { console.log("a is not 1"); } } ``` Do not confuse the primitive Boolean values `true` and `false` with truthiness or falsiness of the {{jsxref("Boolean")}} object. Any value that is not `false`, `undefined`, `null`, `0`, `-0`, `NaN`, or the empty string (`""`), and any object, including a Boolean object whose value is `false`, is considered {{Glossary("truthy")}} when used as the condition. For example: ```js const b = new Boolean(false); if (b) { console.log("b is truthy"); // "b is truthy" } ``` ## Examples ### Using if...else ```js if (cipherChar === fromChar) { result += toChar; x++; } else { result += clearChar; } ``` ### Using else if Note that there is no `elseif` syntax in JavaScript. However, you can write it with a space between `else` and `if`: ```js if (x > 50) { /* do something */ } else if (x > 5) { /* do something */ } else { /* do something */ } ``` ### Using an assignment as a condition You should almost never have an `if...else` with an assignment like `x = y` as a condition: ```js example-bad if ((x = y)) { // … } ``` Because unlike {{jsxref("Statements/while", "while")}} loops, the condition is only evaluated once, so the assignment is only performed once. The code above is equivalent to: ```js example-good x = y; if (x) { // … } ``` Which is much clearer. However, in the rare case you find yourself wanting to do something like that, the [`while`](/en-US/docs/Web/JavaScript/Reference/Statements/while) documentation has a [Using an assignment as a condition](/en-US/docs/Web/JavaScript/Reference/Statements/while#using_an_assignment_as_a_condition) section with our recommendations. ## Specifications {{Specifications}} ## Browser compatibility {{Compat}} ## See also - {{jsxref("Statements/block", "block")}} - {{jsxref("Statements/switch", "switch")}} - [Conditional (ternary) operator](/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator)