Haruskah keduanya merujuk objek yang sama?
Haruskah keduanya merujuk objek yang sama?
Jawaban:
Menurut W3C, mereka sama. Pada kenyataannya, untuk keamanan lintas browser, Anda harus menggunakan window.locationdaripada document.location.
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.locationdiganti dengan document.URL(lihat di sini di MSDN ), yang juga merupakan bagian dari DOM Level 1 .
Sejauh yang saya tahu, semua browser modern peta document.locationuntuk window.location, tapi aku masih lebih suka window.locationseperti itulah apa yang telah digunakan sejak saya menulis DHTML pertama saya.
window.location, bukankah sama-sama berlaku untuk hanya menggunakan location?
windowobjek. Dengan demikian, setiap variabel atau fungsi yang Anda tetapkan di tingkat atas skrip Anda, adalah properti dari objek yang dirujuk oleh window, yang kebetulan merupakan objek global. Objek global tersirat ketika tidak ada suka window.- dengan demikian locationditafsirkan sebagai window.location. Peringatan - fe if(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).
document.locationhanya baca di IE. Saya dapat berhasil menetapkannya di IE 10, 9, 8 dan 6 (menggunakan VM dari modern.ie ).
console.log(location);? !!
document.locationpada awalnya adalah properti hanya-baca, meskipun browser Gecko memungkinkan Anda untuk menugaskannya juga. Untuk keamanan lintas-browser, gunakan window.locationsaja.
Baca lebih lajut:
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.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.locationdan document.locationtidak dapat dibayangi di Chrome atau Firefox.
Sejauh yang saya tahu, keduanya sama. Untuk keamanan lintas browser, Anda dapat menggunakan window.locationdaripada document.location.
Semua browser modern peta document.locationuntuk window.location, tapi aku masih lebih suka window.locationseperti itulah apa yang telah digunakan sejak saya menulis halaman web pertama saya. ini lebih konsisten.
Anda juga dapat melihat document.location === window.locationpengembalian true, yang mengklarifikasi bahwa keduanya sama.
document.location === window.location kembali true
juga
document.location.constructor === window.location.constructor adalah true
Catatan: Baru diuji pada, Firefox 3.6, Opera 10 dan IE6
===dan ==setara.
"abc" == new String("abc")kembali truesambil "abc" === new String("abc")kembali false.
==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 Return truejika x dan y merujuk ke objek yang sama. Kalau tidak, kembalilah false.
document.locationdan window.locationyang 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 dengan window.location.toString(), Kemudian document.location==window.locationakan mengembalikan true sementara document.location===window.locationakan mengembalikan false.
document.location === window.locationperbandingan berjalan. Fakta bahwa .constructorperbandingan 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:
window.location === document.location
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.
Saya akan katakan window.locationadalah cara yang lebih dapat diandalkan untuk mendapatkan URL saat ini . Berikut ini adalah perbedaan antara window.locationdan document.urlyang 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 gunakan window.locationmaka saya bisa mendapatkan parameter hash dari URL.
Jadi selalu lebih baik digunakan window.location.
document.URL- ini tentang window.locationdan document.location. Juga, document.urltidak ada = harus huruf besar.
document.location.constructor === window.location.constructoradalah true.
Itu karena benda itu persis sama dengan yang bisa Anda lihat document.location===window.location.
Jadi tidak perlu membandingkan konstruktor atau properti lainnya.
Ya, mereka sama, tapi ....!
window.location tidak berfungsi pada beberapa browser Internet Explorer.
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):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Info lebih lanjut: https://developers.google.com/analytics/devguides/collection/gajs/
Di versi baru mereka menggunakan '//' sehingga browser dapat secara otomatis menambahkan protokol:
'//www.google-analytics.com/analytics.js'
Jadi jika Google lebih memilih document.location ke window.locationketika mereka membutuhkan protokol di JS, saya kira mereka memiliki beberapa alasan untuk itu.
KESELURUHAN : Saya pribadi percaya itu document.locationdan window.locationsama, tetapi jika raksasa dengan statistik terbesar tentang penggunaan browser seperti Google menggunakan document.location , saya sarankan untuk mengikuti mereka.
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