Skip to main content

How to Solve the "TypeError: window.location.href is not a function" Error

The TypeError: window.location.href is not a function is a common error in JavaScript that occurs when you try to invoke window.location.href as a function with parentheses (). This error stems from a fundamental misunderstanding of the difference between a property and a method.

This guide will explain exactly why this error happens and show you the correct ways to redirect a user to a new page, including setting the href property and using the assign() and replace() methods.

The Core Problem: Properties vs. Methods

It's crucial to understand the difference between a property and a method on an object:

  • A Property is a value that you can get or set. Think of it as a noun. For example, car.color is a property. You would set it like this: car.color = 'blue'.
  • A Method is a function that you can call to perform an action. Think of it as a verb. For example, car.start() is a method. You call it with parentheses: car.start().

The window.location.href is a property. It holds a string representing the current URL of the page. The error occurs because you are trying to call it like a method.

Example of problem:

// PROBLEM: Trying to call the `href` property as if it were a function.
window.location.href('https://example.com');

Error Output:

Uncaught TypeError: window.location.href is not a function

The Solution: Assigning a Value to window.location.href

The correct and most common way to redirect the browser to a new page is to assign a string containing the new URL to the window.location.href property.

Solution:

// Correct: Assign the new URL string to the `href` property.
window.location.href = 'https://example.com';
note

This is the most idiomatic and widely-used method for performing a redirect in client-side JavaScript.

Alternative Methods: assign() and replace()

The window.location object also provides two methods that can be used for navigation.

The assign() Method

The window.location.assign() method navigates to the given URL. It behaves almost identically to setting window.location.href.

// This also works and has the same effect as setting .href
window.location.assign('https://example.com');
note

While this is perfectly valid, setting the href property directly is more common and concise.

The replace() Method (A Key Difference)

The window.location.replace() method also navigates to a new URL, but with one critical difference: it replaces the current page in the session history. This means the user cannot use the "Back" button in their browser to return to the original page.

// This will redirect, and the user will not be able to navigate back.
window.location.replace('https://example.com');
note

This is very useful after a form submission or a login process, where you don't want the user to be able to go back and resubmit the form.

Practical Example: A Redirect Button

This script demonstrates a common use case: a button that redirects the user to a new page when clicked.

HTML:

<button id="redirect-btn">Go to Example.com</button>

JavaScript:

const redirectButton = document.getElementById('redirect-btn');

redirectButton.addEventListener('click', () => {
console.log('Redirecting to example.com...');

// Use .replace() for a one-way navigation
// window.location.replace('https://example.com');

// Use .href for a standard navigation
window.location.href = 'https://example.com';
});

Conclusion

The TypeError: window.location.href is not a function is a clear signal that you are trying to call a property.

To solve it, you must assign a value instead of invoking it:

  • window.location.href = '...': The most common and recommended method for a standard redirect.
  • window.location.assign('...'): A valid alternative that achieves the same result as setting href.
  • window.location.replace('...'): Use this when you want to redirect and prevent the user from navigating back to the original page.