回答:
W3Cによると、それらは同じです。実際には、クロスブラウザーの安全性のために、window.location
ではなくを使用する必要がありますdocument.location
。
window.location
、正当な理由を提供せずにベストプラクティス(常にを使用)を推奨する場合。正当な理由を提供しないのであれば、なぜ誰かがあなたのアドバイスをするべきなのでしょうか?クリストフの答えはこの点ではるかに有用です。
現在の場所オブジェクトを取得する正規の方法window.location
は次のとおりです(1996年のこのMSDNページと2006年のW3Cドラフトを参照してください)。
これをdocument.location
、元の現在のURLのみを文字列として返したと比較してください(MSDNのこのページを参照)。おそらく混乱を避けるために、これはDOM Level 1の一部でもある(MSDNのこちらを参照)document.location
に置き換えられました。document.URL
私の知る限り、すべての最新のブラウザーはにマップさdocument.location
れますwindow.location
がwindow.location
、私は最初のDHTMLを作成して以来、これを使用してきたので、それでも好みです。
window.location
するだけで同等に有効ではありませんlocation
か?
window
オブジェクトです。したがって、スクリプトの最上位で定義する変数または関数は、によって参照されるオブジェクトのプロパティでありwindow
、これはたまたまグローバルオブジェクトです。のように存在しない場合、グローバルオブジェクトは暗黙指定されますwindow.
-したがってlocation
、解釈されますwindow.location
。警告- if(an_undefined_variable)
変数が定義されていない場合、fe はエラーをスローします-定義しif(window.an_undefined_variable)
ません。
window.locationは、すべての準拠ブラウザーで読み取り/書き込み可能です。
document.locationはInternet Explorerでは(少なくとも)読み取り専用ですが、Geckoベースのブラウザー(Firefox、SeaMonkey)では読み取り/書き込み可能です。
console.log(location);
?!!
document.location
もともとは読み取り専用のプロパティでしたが、Geckoブラウザーを使用してこれを割り当てることもできます。ブラウザ間の安全のために、window.location
代わりに使用してください。
続きを読む:
興味深いことに、「location」という名前のフレーム、画像、またはフォームがある場合、「document.location」は、Locationオブジェクトの代わりに、それぞれフレームウィンドウ、画像、またはフォームへの参照を提供します。どうやら、これはdocument.forms、document.images、およびwindow.framesコレクション名のルックアップがwindow.locationへのマッピングよりも優先されるためです。
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.location
及びdocument.location
クロムまたはFirefoxでシャドーイングすることはできません。
document.location === window.location
戻り値 true
また
document.location.constructor === window.location.constructor
です true
注:、Firefox 3.6、Opera 10、IE6でテスト済み
===
および==
等価です。
"abc" == new String("abc")
戻りtrue
ながら、"abc" === new String("abc")
リターンfalse
。
==
そして===
等価です。仕様のセクション11.9.3および11.9.6を参照してください。null以外の場合は、非未定義、非数、非ブール値は、同じタイプの非文字列の値は、==
動作は11.9.3一部の1F、とに支配され===
、同一読み11.9.6パート7で動作戻るtrue
場合xとyは同じオブジェクトを参照します。それ以外の場合は、を返しfalse
ます。
document.location
し、window.location
オブジェクトを指しています。あなたはトリプルイコールの全体のポイントを逃しています。2つのequalsを使用しても、それらが同じオブジェクトであることは証明されません。2つのイコールは偽陽性をもたらすため、2つのイコールではなく3つのイコールを使用する必要があります。document.locationは、URL文字列であることにより、ブラウザ上に等しいwindow.location.toString()
、そして、document.location==window.location
真の間を返しますdocument.location===window.location
falseを返します。
document.location === window.location
比較する限り、あなたはまったく正しいです。.constructor
比較もスローされているという事実は、この答えはまだ正しいと私は思いますが、使用===
すると推論が簡単になります。
はい、同じです。これは、ブラウザのJS APIにおける多くの歴史的癖の1つです。やってみてください:
window.location === document.location
私はwindow.location
、現在のURLを取得するより信頼性の高い方法だと思います。以下は、URLにハッシュパラメータを追加して後で読むシナリオの1つで前に出てきたwindow.location
との違いdocument.url
です。
URLにハッシュパラメータを追加した後。
古いブラウザでは、私が使用してURLからハッシュパラメータを取得することができませんでしたdocument.url
が、私が使用したときにwindow.location
、私はURLからハッシュパラメータを取得することができました。
したがって、常にを使用することをお勧めしますwindow.location
。
document.URL
-それはについてだったwindow.location
とdocument.location
。また、document.url
存在しない=大文字にする必要があります。
ええと、彼らは同じですが、....!
window.location
一部のInternet Explorerブラウザでは動作しません。
ほとんどの人がここで推奨していますが、Googleアナリティクスの動的プロトコルは、年齢を問わずこのように見えました(最近、ga.jsからanalytics.jsに移行する前)。
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
詳細: https : //developers.google.com/analytics/devguides/collection/gajs/
新しいバージョンでは、「//」を使用して、ブラウザが自動的にプロトコルを追加できるようにしました。
'//www.google-analytics.com/analytics.js'
したがって、GoogleがJSでプロトコルを必要とするときよりもdocument.locationを好む場合window.location
、それらにはいくつかの理由があると思います。
全体:私は個人的には同じであるdocument.location
と信じていwindow.location
ますが、document.locationを使用したGoogleなどのブラウザーの使用に関する最大の統計情報を持つ巨人の場合は、それに従うことをお勧めします。
実際には、両方のクロムの違いに気づきます。たとえば、子フレームからサンドボックス化されたフレームへのナビゲーションを実行したい場合、これはdocument.locationでのみ実行できますが、window.locationでは実行できません。