読者です 読者をやめる 読者になる 読者になる

Kokudoriing

技術系与太話ブログ

location.href と location.assign(url)

現在の表示しているページを URL に紐付いたページに移動したい場合。
location.href プロパティに URL 文字列を代入すればOKです。
ちなみに location オブジェクトに直接 URL 文字列を代入しても同じ結果になります。
ただ、location.assign メソッドを使うと全く同じことができます。

(function(undefined) {
  // 以下全て同じ結果
  location.href = 'http://d.hatena.ne.jp/Kokudori/';
  location = 'http://d.hatena.ne.jp/Kokudori/';
  location.assign('http://d.hatena.ne.jp/Kokudori/');
}).apply(this);

さて、この中で圧倒的に有名な手法は location.href です。
しかし、ページ移動は動作を意味するのでプロパティ代入でなくメソッド呼び出しが適当です。

location.assign メソッドは W3C 標準で IE4.0 より実装されてるみたいです。
(参考 http://www.red.oit-net.jp/tatsuya/java/reference/location.htm)

何故 location.href が多く使われてるんでしょうか。
歴史的な背景でもあるんですかね。
ちなみに「パーフェクトJavaScript」でも同じ挙動になると書かれています。

assign() メソッドを実行すると表示しているページを別のページに移動します。
これは href プロパティに値をセットするのと同じ挙動になります。

「パーフェクトJavaScript」 P243

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

しかし W3C には assign メソッドについてこんな事が‥。

Need description for assign.

http://www.w3.org/TR/Window/#location-methods

ただ 手元の Chrome21 では assign メソッドと href プロパティ代入に差が無いように思います。(適当)
というわけで location.href でなく location.assign() メソッドを使いましょう。