DEV Community

Cover image for The Top 9 JavaScript Mistakes Developers Make
NFTs Lab 🧪
NFTs Lab 🧪

Posted on • Edited on

The Top 9 JavaScript Mistakes Developers Make

When it comes to writing JavaScript, there are a few common mistakes that developers tend to make.

In this article, we'll take a look at some of the most common JavaScript mistakes and how to avoid them.

1. Misusing the this keyword

One of the most common mistakes developers make when working with JavaScript is misusing the this keyword. The this keyword refers to the object that the current code is being executed on. This can be the global object, a DOM element, or any other object. In most cases, the this keyword is used to reference the object that the current code is being executed on.

However, there are a few cases where the this keyword can be misused. One common mistake is using the this keyword inside of a nested function. In this case, the this keyword will refer to the global object, not the object that the code is being executed on.

To avoid this mistake, make sure to use the this keyword only when you're referring to the object that the current code is being executed on.

2. Not using strict mode

Another common mistake developers make is not using strict mode. Strict mode is a way to opt-in to a restricted variant of JavaScript. In strict mode, certain syntax is not allowed, and certain behaviors are changed. For example, in strict mode, you cannot use undeclared variables.

Strict mode is not enabled by default, so you have to opt-in to it. To do so, you add the following line of code at the top of your JavaScript file:

"use strict";
Enter fullscreen mode Exit fullscreen mode

By adding this line of code, you're telling the JavaScript engine to enable strict mode for the code that follows.

3. Declaring variables in the global scope

One of the main purposes of the strict mode is to prevent variables from being declared in the global scope. In JavaScript, the global scope is the default scope. This means that any variables that are declared outside of a function are automatically added to the global scope.

This can lead to problems because it's easy to accidentally overwrite existing variables in the global scope. For example, if you declare a variable with the same name as an existing global variable, you will overwrite the existing variable.

To avoid this, make sure to always declare your variables inside of a function. This will ensure that they're not added to the global scope.

4. Using == instead of ===

In JavaScript, there are two ways to check if two values are equal: == and ===. The == operator checks for value equality, while the === operator checks for value and type equality.

Most of the time, you want to use the === operator because it's more strict. However, there are a few cases where == can be useful. For example, if you're comparing two values that could be of different types, == can be helpful because it will convert the values to the same type before comparing them.

5. Forgetting to bind this

When you're working with JavaScript's object-oriented features, you'll often need to reference the current object inside of a method. To do this, you use the this keyword.

However, the value of this can be changed depending on how the method is called. For example, if you call a method on an object, this will refer to that object. But if you call the same method using another object, this will refer to that object instead.

This can be a problem because it can be hard to keep track of what this is referring to. To avoid this, make sure to bind the value of this to the current object. You can do this by using the bind method:

var obj = {
  foo: function() {
    console.log(this);
  }
};

var bar = obj.foo.bind(obj);

bar(); // prints the obj object
Enter fullscreen mode Exit fullscreen mode

In the code above, we create an object with a method called foo. We then create a new variable called bar and set it to the result of calling bind on foo. This sets the value of this inside of foo to the obj object. When we call bar, it prints obj to the console.

6. Modifying a string instead of creating a new one

In JavaScript, strings are immutable. This means that once a string is created, it cannot be changed.

However, there are a few methods that can be used to modify strings. For example, the replace method can be used to replace part of a string with another string.

var str = "Hello world!";

str.replace(" world", " JavaScript"); // returns "Hello JavaScript!"
Enter fullscreen mode Exit fullscreen mode

The replace method doesn't actually modify the original string, it just returns a new string with the modifications. This is important to remember because it's easy to accidentally modify a string when you meant to create a new one.

To avoid this mistake, make sure to create a new string when you're modifying an existing string. You can do this by using the slice method:

var str = "Hello world!";

var newStr = str.slice(0, 5) + " JavaScript!"; // returns "Hello JavaScript!"
Enter fullscreen mode Exit fullscreen mode

In the code above, we use the slice method to create a new string that contains the first five characters of the original string. We then concatenate that with the string " JavaScript!". This creates a new string that we can assign to the newStr variable.

7. Creating a memory leak

A memory leak is a problem that can occur when programming in JavaScript. It happens when you hold on to a reference to an object that is no longer needed.

For example, consider the following code:

var arr = [1, 2, 3, 4, 5];

var foo = function() {
  arr.push(6);
};

setInterval(foo, 1000);
Enter fullscreen mode Exit fullscreen mode

In the code above, we create an array and a function that adds a new element to the array. We then set a timer that calls the function every second.

This code will cause a memory leak because the arr array will never be garbage collected. This is because the foo function has a reference to the arr array, and the foo function is being called every second.

To avoid this mistake, make sure to remove references to objects that are no longer needed. In the example above, we can do this by using the clearInterval method:

var arr = [1, 2, 3, 4, 5];

var foo = function() {
  arr.push(6);
};

var interval = setInterval(foo, 1000);

clearInterval(interval);
Enter fullscreen mode Exit fullscreen mode

In the code above, we store the return value of setInterval in a variable. This return value is a reference to the interval that's been created. We can then use the clearInterval method to clear the interval and remove the reference to the arr array.

8. Not using === to compare values

In JavaScript, there are two ways to compare values: == and ===. The == operator checks for value equality, while the === operator checks for value and type equality.

Most of the time, you want to use the === operator because it's more strict. However, there are a few cases where == can be useful. For example, if you're comparing two values that could be of different types, == can be helpful because it will convert the values to the same type before comparing them.

9. Not using an IIFE

An IIFE (Immediately Invoked Function Expression) is a function that is immediately executed. IIFEs are commonly used in JavaScript to create local scope.

For example, consider the following code:

var foo = "foo";

(function() {
  var foo = "bar";
})();

console.log(foo); // prints "foo"
Enter fullscreen mode Exit fullscreen mode

In the code above, we have a global variable called foo that has the value "foo". We then create an IIFE that has a local variable with the same name. This local variable is only accessible inside of the IIFE.

When we log the value of foo to the console, it prints "foo". This is because the IIFE create a new scope that is separate from the global scope.

To avoid this mistake, make sure to use an IIFE when you want to create a new scope.


Looking for a great community of people interested in Javascript and Crypto? Join our Discord server! 💙🧪

Discord: https://discord.gg/P8bjJ7CzBV

Top comments (0)