Every language has its own quirks and JavaScript, the most used programming language, is no exception. This article will cover a plethora of JavaScript Shorthand Optimization tricks that can help you write better code, and also make sure this is NOT your reaction when you encounter them:
1. Multiple string checks
Often you might need to check if a string
is equal to one of the multiple values, and can become tiring extremely quickly. Luckily, JavaScript has a built-in method to help you with this.
// Long-hand
const isVowel = (letter) => {
if (
letter === "a" ||
letter === "e" ||
letter === "i" ||
letter === "o" ||
letter === "u"
) {
return true;
}
return false;
};
// Short-hand
const isVowel = (letter) =>
["a", "e", "i", "o", "u"].includes(letter);
2. For-of
and For-in
loops
For-of
and For-in
loops are a great way to iterate over an array
or object
without having to manually keep track of the index of the keys
of the object
.
For-of
const arr = [1, 2, 3, 4, 5];
// Long-hand
for (let i = 0; i < arr.length; i++) {
const element = arr[i];
// ...
}
// Short-hand
for (const element of arr) {
// ...
}
For-in
const obj = {
a: 1,
b: 2,
c: 3,
};
// Long-hand
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = obj[key];
// ...
}
// Short-hand
for (const key in obj) {
const value = obj[key];
// ...
}
3. Falsey checks
If you want to check if a variable is null
, undefined
, 0
, false
, NaN
, or an empty string
, you can use the Logical Not (!
) operator to check for all of them at once, without having to write multiple conditions. This makes it easy to check if a variable contains valid data.
// Long-hand
const isFalsey = (value) => {
if (
value === null ||
value === undefined ||
value === 0 ||
value === false ||
value === NaN ||
value === ""
) {
return true;
}
return false;
};
// Short-hand
const isFalsey = (value) => !value;
4. Ternary operator
As a JavaScript developer, you must have encountered the ternary operator
. It is a great way to write concise if-else
statements. However, you can also use it to write concise code and even chain them to check for multiple conditions.
// Long-hand
let info;
if (value < minValue) {
info = "Value is too small";
} else if (value > maxValue) {
info = "Value is too large";
} else {
info = "Value is in range";
}
// Short-hand
const info =
value < minValue
? "Value is too small"
: value > maxValue ? "Value is too large" : "Value is in range";
5. Function calls
With the help of the ternary operator
, you can also determine which function to call based on conditions.
IMPORTANT SIDE-NOTE: The call signature
of the functions must be the same, else you risk running into an errors
function f1() {
// ...
}
function f2() {
// ...
}
// Long-hand
if (condition) {
f1();
} else {
f2();
}
// Short-hand
(condition ? f1 : f2)();
6. Switch shorthand
Long switch cases can often be optimized by using an object with the keys as the switches and the values as the return values.
const dayNumber = new Date().getDay();
// Long-hand
let day;
switch (dayNumber) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
}
// Short-hand
const days = {
0: "Sunday",
1: "Monday",
2: "Tuesday",
3: "Wednesday",
4: "Thursday",
5: "Friday",
6: "Saturday",
};
const day = days[dayNumber];
7. Fallback values
The ||
operator can set a fallback value for a variable.
// Long-hand
let name;
if (user?.name) {
name = user.name;
} else {
name = "Anonymous";
}
// Short-hand
const name = user?.name || "Anonymous";
That's all folks! π
Finding personal finance too intimidating? Checkout my Instagram to become a Dollar Ninja
Thanks for reading
Need a Top Rated Front-End Development Freelancer to chop away your development woes? Contact me on Upwork
Want to see what I am working on? Check out my Personal Website and GitHub
Want to connect? Reach out to me on LinkedIn
I am a Digital Nomad and occasionally travel. Follow me on Instagram to check out what I am up to.
Follow my blogs for bi-weekly new tidbits on Dev
FAQ
These are a few commonly asked questions I get. So, I hope this FAQ section solves your issues.
-
I am a beginner, how should I learn Front-End Web Dev?
Look into the following articles: Would you mentor me?
Sorry, I am already under a lot of workload and would not have the time to mentor anyone.
Top comments (54)
I think the the fallback values need some correction. Using logical OR
||
doesnβt give you the value you want if the value is[]
or0
. The better solution would be using the nullish coalescence??
where if only use the fallback values when the defined value isnull
orundefined
.βοΈ
βοΈ
βοΈ
βοΈ
βοΈ
βοΈ
In point 1, everything's fine, but you make the "long hand" version look longer by adding a redundant
if.. else
. This would be a better comparison:In point 4 I would recommend against nesting ternaries because you quickly get an unreadable mess of code, especially when the lines contain long strings which wrap in your editor.
Nice post!
The 5th can be changed as follows
And the 6th can be improved by using Arrays
Suggestion is a bit of a "premature optimization" - you just created a string
" Sunday"
instead of"Sunday"
With something like this, sometimes the longer way is just easier for the next guy to read. Especially when that next guy is you.
Is a new thing for me, but why'd you suggest
instead?
If you need to add different arguments to each function call. You can't do it from the 1st method.
ah so that's why..
hi my friend
hello too
Good job with the article, but I do have some things to say:
For #7, I'd rather go with the nullish coalescing operator(
??
) than||
...And for #4, wouldn't it be a good idea to talk about why someone shouldn't use ternary operators too much as well, i.e., nested ternary operators can be a nightmare for readability, and recommending against it would be good for people who are learning about ternary operators.
Nested ternary would never pass my code review. IMO, one-liner is not an optimization if it affects readability.
Even though your #1 example is more general, this specific case can be shortened:
I resist from using
indexOf
as you can instead useincludes
Some great tips here! Thanks for sharing!
I miss the unicorn π₯²
thanks for sharing this stuff
Some great tips right here, thanks ππ―
Interesting and useful, thanks for sharing.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.