DEV Community

Cover image for Is anything truly empty?
debadeepsen
debadeepsen

Posted on • Edited on

Is anything truly empty?

I decided to write this series because there are parts of JavaScript that feel right, but aren't. Or feel wrong, but are perfectly acceptable, and they can cause common mistakes that could potentially lead to hours of wasted time in unproductive debugging. This is the first of hopefully multiple posts, explaining such concepts, so that you don't fall into one of these traps ever (again).

Empty array is truthy

Consider the following code:

function checkTruthy(o) {
  if (o) console.log("truthy");
  else console.log("not truthy");
}

let s = "";
let t = 0;
let u = [];

checkTruthy(s);
checkTruthy(t);
checkTruthy(u);
Enter fullscreen mode Exit fullscreen mode

So we have an empty string, the number zero, and an empty array. Similar things, right? So what do you expect the output to be? If you guessed anything other than the one below, you're wrong.

not truthy
not truthy
truthy
Enter fullscreen mode Exit fullscreen mode

That is correct, the empty array is truth-like, and as such, any check that looks like if(empty_array) will return true. This can be extremely important when what you really need to check for is the emptiness of said array. In such cases, remember to modify your if statements like so -

if(my_array && my_array.length) {
  // stuff and things
}
Enter fullscreen mode Exit fullscreen mode

What it really checks is if the array variable is undefined or not. That is why the code above also lets you avoid unwanted runtime exceptions.

Oh, and btw? I hope this doesn't blow your mind but you know what makes the empty array non-truthy? A simple negative sign before it. That's right, if(-[]) will never execute, its else block (if it exists) will instead.

[Photo from Pixabay/Pexels]

Top comments (0)