Haruskah keduanya merujuk objek yang sama?
javascript
window.location
Morgan Cheng
sumber
sumber
Jawaban:
Menurut W3C, mereka sama. Pada kenyataannya, untuk keamanan lintas browser, Anda harus menggunakan
window.location
daripadadocument.location
.Lihat: http://www.w3.org/TR/html/browsers.html#dom-location
sumber
window.location
) tanpa memberikan alasan apa pun untuknya. Jika Anda tidak akan memberikan justifikasi, mengapa orang harus menerima saran Anda? Jawaban Christoph jauh lebih berguna dalam hal ini.Cara kanonik untuk mendapatkan objek lokasi saat ini adalah
window.location
(lihat halaman MSDN ini dari 1996 dan draft W3C dari 2006 ).Bandingkan ini dengan
document.location
, yang awalnya hanya mengembalikan URL saat ini sebagai string (lihat halaman ini di MSDN ). Mungkin untuk menghindari kebingungan,document.location
diganti dengandocument.URL
(lihat di sini di MSDN ), yang juga merupakan bagian dari DOM Level 1 .Sejauh yang saya tahu, semua browser modern peta
document.location
untukwindow.location
, tapi aku masih lebih sukawindow.location
seperti itulah apa yang telah digunakan sejak saya menulis DHTML pertama saya.sumber
window.location
, bukankah sama-sama berlaku untuk hanya menggunakanlocation
?window
objek. Dengan demikian, setiap variabel atau fungsi yang Anda tetapkan di tingkat atas skrip Anda, adalah properti dari objek yang dirujuk olehwindow
, yang kebetulan merupakan objek global. Objek global tersirat ketika tidak ada sukawindow.
- dengan demikianlocation
ditafsirkan sebagaiwindow.location
. Peringatan - feif(an_undefined_variable)
akan membuat kesalahan jika variabel tidak didefinisikan -if(window.an_undefined_variable)
tidak akan.window.location adalah baca / tulis pada semua browser yang sesuai.
document.location hanya baca di Internet Explorer (setidaknya), tetapi baca / tulis di browser berbasis Gecko (Firefox, SeaMonkey).
sumber
document.location
hanya baca di IE. Saya dapat berhasil menetapkannya di IE 10, 9, 8 dan 6 (menggunakan VM dari modern.ie ).console.log(location);
? !!document.location
pada awalnya adalah properti hanya-baca, meskipun browser Gecko memungkinkan Anda untuk menugaskannya juga. Untuk keamanan lintas-browser, gunakanwindow.location
saja.Baca lebih lajut:
document.location
window.location
sumber
Menariknya, jika Anda memiliki bingkai, gambar, atau formulir bernama 'lokasi', maka 'document.location' masing-masing memberikan referensi ke jendela bingkai, gambar, atau formulir, alih-alih objek Lokasi. Rupanya, ini karena document.forms, document.images, dan lookup nama koleksi window.frames mendapat prioritas di atas pemetaan ke window.location.
sumber
window.location
dandocument.location
tidak dapat dibayangi di Chrome atau Firefox.Sejauh yang saya tahu, keduanya sama. Untuk keamanan lintas browser, Anda dapat menggunakan
window.location
daripadadocument.location
.Semua browser modern peta
document.location
untukwindow.location
, tapi aku masih lebih sukawindow.location
seperti itulah apa yang telah digunakan sejak saya menulis halaman web pertama saya. ini lebih konsisten.Anda juga dapat melihat
document.location === window.location
pengembaliantrue
, yang mengklarifikasi bahwa keduanya sama.sumber
document.location === window.location
kembalitrue
juga
document.location.constructor === window.location.constructor
adalahtrue
Catatan: Baru diuji pada, Firefox 3.6, Opera 10 dan IE6
sumber
===
dan==
setara."abc" == new String("abc")
kembalitrue
sambil"abc" === new String("abc")
kembalifalse
.==
dan===
setara. Lihat bagian spesifikasi 11.9.3 dan 11.9.6. Untuk nilai-nilai non-null, non-undefined, non-number, non-bool, non-string dengan tipe yang sama,==
perilaku diatur oleh 11.9.3 bagian 1f, dan===
perilaku oleh 11.9.6 bagian 7, yang secara identik membaca Returntrue
jika x dan y merujuk ke objek yang sama. Kalau tidak, kembalilahfalse
.document.location
danwindow.location
yang menunjuk ke objek. Anda melewatkan seluruh poin triple sama dengan; menggunakan 2 sama dengan tidak membuktikan bahwa mereka adalah objek yang sama. Kita harus menggunakan 3 sama dengan dan bukan 2 sama dengan karena 2 sama dengan akan memberi kita positif palsu. Pada browser di mana document.location adalah string URL sama denganwindow.location.toString()
, Kemudiandocument.location==window.location
akan mengembalikan true sementaradocument.location===window.location
akan mengembalikan false.document.location === window.location
perbandingan berjalan. Fakta bahwa.constructor
perbandingan dilemparkan juga berarti, saya pikir, bahwa jawaban ini masih masuk akal, tetapi menggunakan===
akan menyederhanakan alasannya.Ya, mereka sama. Ini adalah salah satu dari banyak kebiasaan historis di browser JS API. Coba lakukan:
sumber
window.location lebih konsisten dari keduanya, mengingat browser lama.
sumber
Jarang melihat perbedaannya saat ini karena html 5 tidak mendukung frameset lagi. Tetapi kembali pada saat kita memiliki frameset, document.location hanya akan mengarahkan frame di mana kode sedang dieksekusi, dan window.location akan mengarahkan seluruh halaman.
sumber
Saya akan katakan
window.location
adalah cara yang lebih dapat diandalkan untuk mendapatkan URL saat ini . Berikut ini adalah perbedaan antarawindow.location
dandocument.url
yang muncul di depan dalam salah satu skenario di mana saya menambahkan parameter hash di URL dan membacanya nanti.Setelah menambahkan parameter hash di URL.
Di browser yang lebih lama, saya tidak bisa mendapatkan parameter hash dari URL dengan menggunakan
document.url
, tetapi ketika saya gunakanwindow.location
maka saya bisa mendapatkan parameter hash dari URL.Jadi selalu lebih baik digunakan
window.location
.sumber
document.URL
- ini tentangwindow.location
dandocument.location
. Juga,document.url
tidak ada = harus huruf besar.document.location.constructor === window.location.constructor
adalahtrue
.Itu karena benda itu persis sama dengan yang bisa Anda lihat
document.location===window.location
.Jadi tidak perlu membandingkan konstruktor atau properti lainnya.
sumber
Setidaknya di IE, ada sedikit perbedaan pada file lokal:
document.URL akan mengembalikan "file: // C: \ project \ abc \ a.html"
tetapi window.location.href akan mengembalikan "file: /// C: /projects/abc/a.html"
Satu adalah back slash, satu adalah slash ke depan.
sumber
Ya, mereka sama, tapi ....!
window.location
tidak berfungsi pada beberapa browser Internet Explorer.sumber
Meskipun sebagian besar orang merekomendasikan di sini, seperti itulah protokol dinamis Google Analytics terlihat seperti untuk waktu yang lama (sebelum mereka pindah dari ga.js ke analytics.js baru-baru ini):
Info lebih lanjut: https://developers.google.com/analytics/devguides/collection/gajs/
Di versi baru mereka menggunakan '//' sehingga browser dapat secara otomatis menambahkan protokol:
Jadi jika Google lebih memilih document.location ke
window.location
ketika mereka membutuhkan protokol di JS, saya kira mereka memiliki beberapa alasan untuk itu.KESELURUHAN : Saya pribadi percaya itu
document.location
danwindow.location
sama, tetapi jika raksasa dengan statistik terbesar tentang penggunaan browser seperti Google menggunakan document.location , saya sarankan untuk mengikuti mereka.sumber
Sebenarnya saya melihat perbedaan dalam chrome di antara keduanya, Misalnya jika Anda ingin melakukan navigasi ke bingkai kotak pasir dari bingkai anak maka Anda dapat melakukan ini hanya dengan document.location tetapi tidak dengan window.location
sumber