# Reference Error vs. TypeError in JS

JavaScript is a powerful programming language that allows developers to create dynamic web applications. However, with great power comes great responsibility, and with JavaScript, that means being aware of the different types of errors that can occur during code execution. Two common types of errors in JavaScript are `ReferenceError` and `TypeError`.

`ReferenceError` is an error that occurs when you try to access a variable or function that does not exist in the current scope. This can happen when you try to reference a variable that has not been declared, or when you try to access a function that is not defined.

For example, let's say you have the following code:

```javascript
console.log(myVariable);
```

If `myVariable` has not been declared or initialized in the current scope, this will throw a `ReferenceError`:

```javascript
Uncaught ReferenceError: myVariable is not defined
```

This error message tells you that `myVariable` is not defined, which means that you need to either declare and initialize it or make sure that it is defined in the correct scope.

On the other hand, `TypeError` is an error that occurs when you try to use a value that is not of the expected type. This can happen when you try to call a method on a value that is not an object, or when you try to access a property on an undefined value.

For example, let's say you have the following code:

```javascript
const myString = "Hello, world!";
myString.push(" ");
```

In this case, `myString` is a string, and `push()` is a method that can be called on arrays to add elements to them. However, `myString` is not an array, so calling `push()` on it will throw a `TypeError`:

```javascript
Uncaught TypeError: myString.push is not a function
```

This error message tells you that `myString.push` is not a function, which means that you are trying to call a method on a value that is not of the expected type. To fix this error, you need to make sure that you are calling the correct method on the correct type of value.

In summary, `ReferenceError` occurs when you try to access a variable or function that does not exist in the current scope, while `TypeError` occurs when you try to use a value that is not of the expected type. By understanding the differences between these two types of errors, you can write more robust and error-free JavaScript code.
