web-dev-qa-db-ja.com

window.location =とwindow.location.replace()の違いは何ですか?

この2行に違いはありますか?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
241
Aaron Digulla

window.locationはあなたの履歴に項目を追加します。「戻る」をクリックして現在のページに戻ることができます。

window.location.replaceは現在の履歴項目を置き換えるので、元に戻れません。

window.location を参照してください。

assign(url):提供されたURLでドキュメントをロードします。

replace(url):現在の文書を提供されたURLの文書と置き換えます。 assign()メソッドとの違いは、replace()を使用した後、現在のページはセッション履歴に保存されないことです。つまり、ユーザーは戻るボタンを使用してページに移動することはできません。

ああ、一般的に言えば:

window.location.href = url;

よりも好まれている:

window.location = url;
364
cletus

TLDR;

location.hrefを使用するか、window.location.hrefを使用してください。

しかし、これを読むと否定できない証拠が得られます。

真実はそれを使うのは良いことですが、なぜ疑わしいことをするのです。あなたはより高い道を進むべきであり、それがおそらく行われるべきであるようにそれをただ行うべきです。

location = "#/mypath/otherside"
var sections = location.split('/')

このコードは文法的にも論理的にも完全に正しいです。

location.hrefの代わりにlocationがあります

これはどうですか

var mystring = location = "#/some/spa/route"

mystringの値は何ですか?誰かがテストをしなくても本当に知っていますか。ここで何が起きるのか正確にはわからない。地獄私はちょうどこれを書いた、そして私はそれが何をするのかさえ知らない。 locationはオブジェクトですが、文字列を代入して文字列を渡すか、ロケーションオブジェクトを渡します。これがどのように実装されるべきであるかに対する何らかの答えがあると言うことができます。あなたはすべてのブラウザが同じことをすることを保証できますか?

これは私がほとんどすべてのブラウザが同じものを扱うことになると思います。

var mystring = location.href = "#/some/spa/route"

これをTypeScriptに配置した場合、型コンパイラはこれがオブジェクトであると想定していると言ってしまうので、うまくいかないでしょうか。

しかし、この会話はlocationオブジェクトよりもずっと深くなります。この変換はどのようなプログラマになりたいのですか?

このショートカットを使えば、今日は大丈夫かもしれませんが、明日も大丈夫かもしれませんが、永遠に大丈夫かもしれませんが、今あなたは悪いプログラマです。それはあなたにとって大丈夫ではないでしょう、そしてそれはあなたを失敗させるでしょう。

もっとオブジェクトがあるでしょう。新しい構文があります。

あなたは文字列だけを取り、オブジェクトを返すgetterを定義するかもしれません、そして最悪の部分はあなたが何か正しいことをしていると思うだろうということです。

var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"

ゲッターとセッターでは、このコードは実際にはうまくいきますが、それができるからといってそれが 'WISE'であるという意味ではありません。

プログラミングをしている人のほとんどは、プログラミングを愛し、上達するのが大好きです。ここ数年で、私はかなり上達し、多くのことを学びました。特にあなたがライブラリを書くときに私が今知っている最も重要なことは一貫性と予測可能性です。

あなたが一貫してできることをしなさい。

+"2" < - この右側の文字列は数値に解析されます。あなたはそれを使うべきですか?それともparseInt("2")を使うべきですか?

var num =+"2"はどうですか?

あなたが学んだことから、stackoverflowの精神から、私はあまり望みどおりではありません。

あなたがこれら2つの単語に従うことを始めるならば、一貫性と予測可能性。あなたはstackoverflowに関するたくさんの質問に対する正しい答えを知るでしょう。

これがどのように恩恵を受けるかを私にお見せしましょう。通常私は私が書くjavascriptのすべての行に;を置きます。私はそれがより表現力豊かであることを知っています。私はそれがより明確であることを知っています。私は私の規則に従った。ある日私はしないことにしました。どうして?非常に多くの人がそれはもう必要ではなくJavaScriptがそれなしでできることを私に言っているからです。だから私はこれをやることにしました。今、私はプログラマーとしての自分の自信を持っているので(あなたが言語を習得することの実を楽しむべきであるので)私は非常に簡単なものを書きました、そして、私はそれをチェックしませんでした。 1つのコンマを消去しましたが、1つのコンマを削除するなどの単純なことを再テストする必要があるとは思いませんでした。

私はes6とbabelでこれに似たものを書いた

var a = "hello world"
(async function(){
  //do work
})()

このコードは失敗し、理解するのに永遠にかかりました。どういうわけかそれが見たのは

var a = "hello world"(async function(){})()

ソースコードの奥深くに隠されていて、「こんにちは世界」と言っていたのは機能ではありません。

もっと面白いことに、ノードは変換されたコードのソースマップを表示しません。

愚かな時間を無駄にしました。私はES6がどのように優れているかについても同様に誰かに提示していました、それから私はデバッグを開始し、頭痛のないそしてより良いES6がいかにあるかを実証しなければなりませんでした。納得できないのです。

これであなたの質問に答えられると思います。これは古い質問ですが、それは将来の世代、まだ学んでいる人々のためのものです。

人々がそれがどちらの方法でも問題ではないと言うときの質問。チャンスはより賢い経験豊富な人があなたに他の賢明を言うでしょう。

誰かがlocationオブジェクトを上書きしたらどうなるでしょう。彼らはより古いブラウザのためにシムをするでしょう。それはシムされる必要があるいくつかの新機能を取得し、あなたの3歳のコードは失敗するでしょう。

熟考する最後のメモ。

明確で目的に合ったコードを書くことはあなたのコードにとって正しいか間違っている答えができない何かをします。それがすることはそれがあなたのコードをイネーブラにすることです。

あなたは、コード間の中断を恐れずに、より多くのもののプラグイン、ライブラリを使用することができます。

レコード用。使用

window.location.href

12
Lpc_dark