Skip to content

Why some statements can’t be used with boolean operators

I like to use this style for single line conditional function calls:

debug && console.log('Debug is on');

It’s much more terse than it’s if counter part.

However some statements dont work, e.g. return and debugger:

error && return null
(value == '43') && debugger;

Why does it not work for the above statements? Instead I use:

if (error) return null;
if (value == '43') debugger;



For the same reason you can’t say things like these:

const foo = if (bar) { 5 } else { "hi" };
const baz = try { somethingThatCanFail(); } catch (err) { console.error(err); fallback(); };

Javascript, like a lot of other programming languages, retains the difference between an expression and a statement. You can’t use a statement in a place where syntactically an expression is expected.

Expressions evaluate to a value, even if that value is undefined. An invocation of a function is an expression. Even an assignment is an expression. But things like try, return, and if are statements.

In some programming languages (notably most functional languages) everything is an expression and evaluates to a value.