chimerical
chimerical

Reputation: 6023

JavaScript: Setting location.href versus location

When would you set location to a URL string versus setting location.href?

location = "http://www.stackoverflow.com";

vs

location.href = "http://www.stackoverflow.com";

Mozilla Developer Network Reference

Upvotes: 358

Views: 302503

Answers (8)

Gras Double
Gras Double

Reputation: 16383

One difference to keep in mind, though.

Let's say you want to build some URL using the current URL. The following code will in fact redirect you, because it's not calling String.prototype.replace but Location.prototype.replace:

nextUrl = window.location.replace('/step1', '/step2');

The following codes work:

// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');

// href property
nextUrl = window.location.href.replace('/step1', '/step2');

Upvotes: 20

Tigerware
Tigerware

Reputation: 3924

With TypeScript, use window.location.href as window.location is technically an object containing:

Properties
hash
host
hostname
href    <--- you need this
pathname (relative to the host)
port
protocol
search

Setting window.location will produce a type error, while window.location.href is of type string.

Source

Upvotes: 13

Kirby L. Wallace
Kirby L. Wallace

Reputation: 787

Like as has been said already. But, you will do better to use the .href version.

Upvotes: 65

psychotik
psychotik

Reputation: 39029

Even if both work, I would use the latter.

Upvotes: 151

Ashwani Panwar
Ashwani Panwar

Reputation: 4608

Use global.location.href instead, while working with React.

Upvotes: 3

bobince
bobince

Reputation: 536775

You might set location directly because it's slightly shorter. If you're trying to be terse, you can usually omit the window. too.

URL assignments to both location.href and location are defined to work in JavaScript 1.0, back in Netscape 2, and have been implemented in every browser since. So take your pick and use whichever you find clearest.

Upvotes: 293

Chadams
Chadams

Reputation: 1933

Just to clarify, you can't do location.split('#'), location is an object, not a string. But you can do location.href.split('#'); because location.href is a string.

Upvotes: 16

Dovev Hefetz
Dovev Hefetz

Reputation: 1466

A couple of years ago, location did not work for me in IE and location.href did (and both worked in other browsers). Since then I have always just used location.href and never had trouble again. I can't remember which version of IE that was.

Upvotes: 24

Related Questions