Like any kind of apps, JavaScript apps also have to be written well. Otherwise, we run into all kinds of issues later on.
In this article, we’ll look at some tips we should follow to write JavaScript code faster and better.
var and let
var
is function scoped and let
is block-scoped.
var
is hoisted and let
isn’t.
Only the variable is hoisted, but the value isn’t.
For instance, if we have:
console.log(x);
var x = 1;
then x
would be undefined
since var x
is hoisted but 1 is not.
On the other hand, we can’t do the same thing with let
:
console.log(x);
let x = 1;
We’ll get an error with the code above since we can’t use let
variables unless they’ve been declared.
To reduce confusion, we should use let
variables.
Breaking the forEach Iteration
We can return true
inside the callback that we pass into forEach
to skip an itreration.
This way, we can have the same functionality as continue
.
For instance, we can write:
[0, 1, 2, 3, 4].forEach((val, i) => {
if (val === 2) {
return true;
}
console.log(val);
});
The code about would skip 2 since when val
is 2, then we returned true
.,
So we skipped the console log that’s below it.
Using Slice
The slice
method can be used to get array entries from an array.
We can start with a negative index to return array entries from the right instead of the left.
So if we have:
const arr = [1, 2, 3];
Then:
arr.slice(-1)
returns [3]
.
arr.slice(-2))
returns [2, 3]
.
and:
arr.slice(-3)
returns the original array.
This is because -1
is the index of the last element of the array.
-2
is the second last and so on.
Short Circuit Conditionals
Short circuit conditionals are handy since we can do things with &&
and ||
that we might not have thought of.
For instance, instead of writing:
if(condition){
dosomething();
}
We can write:
condition && dosomething();
since the doSomething
is only run when condition
is truthy with the &&
operator.
Likewise, we can take advantage of short-circuiting with the ||
operator.
For instance, we can write:
a = a || 'default';
since a
is assigned to a
if a
is truthy.
Otherwise, 'default'
is assigned to a
.
Use Optional Arguments
We can make arguments optional with the default parameter syntax.
For instance, we can write:
const divide = (a, b = 1) => a / b;
Then b
would be assigned to 1 if we skipped the argument.
So divide(2)
would be 2.
Copy Things to the Clipboard
We can get the element from a clipboard and copy its contents by writing:
document.querySelector('#foo').select();
document.execCommand('copy');
The first line selects the element with ID foo
.
Then the second line does the copying.
Extract File Extension from a File Name
There are a few ways that we can extract the file extension from the file name
Regex
For instance, we can write:
const getExt = (filename) => {
return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename)[0] : undefined;
}
We have a regex to split the file name by the dot. Then we get the part after the dot with /[^.]+$/.exec(filename)[0]
or undefined
if there’s no dot.
split
Also, we can use the split
method to split a file name by the dot.
For example, we can write:
const getExt = (filename) => {
return filename.split('.').pop();
}
A string has the split
method which can split a string by a separator and returns it as an array of strings.
Then we call pop
to remove the last part of the split string and returns it.
Therefore, we get the extension.
Console Logging Trick
We can use the &&
to run console log before evaluating the expression after it.
Since console.log
returns undefined
the right operand will always be evaluated.
So we can write:
console.log(foo) && false
We logged the value of foo
and return false
all in one expression.
Print a Function to a Console
We can convert a function to a string to print out the function’s code.
For instance, we can write:
console.log(func.toString());
This way, we can see the code of the function in the console log.
Conclusion
We can log a function’s code in with the toString
and console.log
methods.
Also, we can use the &&
operator to log a value before evaluating some other expression.
There are also various ways to get the file extension from a file name.
Finally, we should use let
to declare variables as much as possible.