Cả hai nên tham khảo cùng một đối tượng?
Cả hai nên tham khảo cùng một đối tượng?
Câu trả lời:
Theo W3C, chúng giống nhau. Trong thực tế, để an toàn trình duyệt chéo, bạn nên sử dụng window.location
hơn là document.location
.
window.location
) mà không cung cấp bất kỳ lời biện minh nào cho nó. Nếu bạn sẽ không cung cấp lời biện minh, tại sao mọi người nên đưa ra lời khuyên của bạn? Câu trả lời của Christoph hữu ích hơn nhiều về vấn đề này.
Cách chính tắc để có được đối tượng vị trí hiện tại là window.location
(xem trang MSDN này từ năm 1996 và bản nháp W3C từ năm 2006 ).
So sánh điều này với document.location
, ban đầu chỉ trả về URL hiện tại dưới dạng chuỗi (xem trang này trên MSDN ). Có lẽ để tránh nhầm lẫn, document.location
đã được thay thế bằng document.URL
(xem tại đây trên MSDN ), cũng là một phần của DOM Cấp 1 .
Theo như tôi biết, tất cả các trình duyệt hiện đại đều ánh xạ document.location
tới window.location
, nhưng tôi vẫn thích window.location
những gì tôi đã sử dụng kể từ khi tôi viết DHTML đầu tiên của mình.
window.location
, nó không hợp lệ như nhau chỉ để sử dụng location
?
window
đối tượng. Do đó, bất kỳ biến hoặc hàm nào bạn xác định ở cấp cao nhất của tập lệnh của bạn, là một thuộc tính của đối tượng được tham chiếu bởi window
, điều này xảy ra là đối tượng toàn cục. Đối tượng toàn cầu được ngụ ý khi vắng mặt như thế window.
- do đó location
được hiểu là window.location
. Hãy cẩn thận - if(an_undefined_variable)
sẽ gây ra lỗi nếu biến không được xác định - if(window.an_undefined_variable)
sẽ không.
window.location được đọc / ghi trên tất cả các trình duyệt tuân thủ.
document.location chỉ đọc trong Internet Explorer (ít nhất), nhưng đọc / ghi trong các trình duyệt dựa trên Gecko (Firefox, SeaMonkey).
document.location
đọc trong IE. Tôi có thể gán thành công cho nó trong IE 10, 9, 8 và 6 (sử dụng VM từ Modern.ie ).
console.log(location);
gì về ? !!
document.location
ban đầu là một thuộc tính chỉ đọc, mặc dù các trình duyệt Gecko cũng cho phép bạn gán cho nó. Để an toàn trên nhiều trình duyệt, hãy sử dụngwindow.location
thay thế.
Đọc thêm:
Thật thú vị, nếu bạn có khung, hình ảnh hoặc biểu mẫu có tên 'location', thì 'document.location' cung cấp một tham chiếu đến cửa sổ khung, hình ảnh hoặc biểu mẫu, thay vì đối tượng Location. Rõ ràng, điều này là do tra cứu tên bộ sưu tập document.forms, document.images và window.frames được ưu tiên hơn so với ánh xạ tới window.location.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.location
và document.location
không thể bị che khuất trong Chrome hoặc Firefox.
Theo tôi biết, cả hai đều giống nhau. Để an toàn trình duyệt chéo, bạn có thể sử dụng window.location
chứ không phải document.location
.
Tất cả các trình duyệt hiện đại ánh xạ document.location
tới window.location
, nhưng tôi vẫn thích window.location
những gì tôi đã sử dụng kể từ khi tôi viết trang web đầu tiên của mình. nó phù hợp hơn
bạn cũng có thể thấy document.location === window.location
lợi nhuận true
, điều này làm rõ rằng cả hai đều giống nhau.
document.location === window.location
trả lại true
cũng thế
document.location.constructor === window.location.constructor
Là true
Lưu ý: Chỉ cần thử nghiệm trên, Firefox 3.6, Opera 10 và IE6
===
và ==
là tương đương.
"abc" == new String("abc")
trả về true
trong khi "abc" === new String("abc")
trả về false
.
==
và ===
tương đương. Xem các phần đặc tả 11.9.3 và 11.9.6. Đối với các giá trị không null, không xác định, không số, không bool, không chuỗi có cùng loại, ==
hành vi được điều chỉnh bởi 11.9.3 phần 1f và ===
hành vi của 11.9.6 phần 7, đọc chính xác Trả về true
nếu x và y đề cập đến cùng một đối tượng. Nếu không, trở lại false
.
document.location
và window.location
đang chỉ vào các đối tượng. Bạn đang thiếu toàn bộ điểm của ba bằng; sử dụng 2 bằng không chứng minh rằng chúng là cùng một obj. Chúng ta nên sử dụng 3 bằng và không 2 bằng vì 2 bằng sẽ cho chúng ta dương tính giả. Trên trình duyệt, theo đó document.location là một chuỗi URL bằng window.location.toString()
, Sau đó document.location==window.location
sẽ trả về true trong khi document.location===window.location
sẽ trả về false.
document.location === window.location
so sánh. Thực tế là sự .constructor
so sánh được đưa ra quá có nghĩa, tôi nghĩ rằng câu trả lời này vẫn đúng, nhưng việc sử dụng ===
sẽ đơn giản hóa lý do.
Vâng, họ giống nhau. Đây là một trong nhiều điều kỳ quặc trong lịch sử API API của trình duyệt. Hãy thử làm:
window.location === document.location
window.location là sự phù hợp đáng tin cậy hơn của cả hai, xem xét các trình duyệt cũ hơn.
Ngày nay, rất hiếm khi thấy sự khác biệt vì html 5 không hỗ trợ bộ khung nữa. Nhưng trở lại vào thời điểm chúng ta có frameset, document.location sẽ chỉ chuyển hướng khung trong đó mã đang được thực thi và window.location sẽ chuyển hướng toàn bộ trang.
Tôi muốn nói window.location
là cách đáng tin cậy hơn để có được URL hiện tại . Sau đây là sự khác biệt giữa window.location
và document.url
xuất hiện ở một trong những tình huống mà tôi đang nối các tham số băm trong URL và đọc nó sau.
Sau khi thêm các tham số băm trong URL.
Trong một trình duyệt cũ hơn, tôi không thể lấy các tham số băm từ URL bằng cách sử dụng document.url
, nhưng khi tôi sử dụng window.location
thì tôi có thể nhận được các tham số băm từ URL.
Vì vậy, nó luôn luôn tốt hơn để sử dụng window.location
.
document.URL
- đó là về window.location
và document.location
. Ngoài ra, document.url
không tồn tại = nó nên viết hoa.
document.location.constructor === window.location.constructor
là true
.
Đó là bởi vì nó chính xác là cùng một đối tượng mà bạn có thể nhìn thấy document.location===window.location
.
Vì vậy, không cần phải so sánh các nhà xây dựng hoặc bất kỳ tài sản nào khác.
Vâng, họ giống nhau, nhưng ....!
window.location
không hoạt động trên một số trình duyệt Internet Explorer.
Mặc dù hầu hết mọi người khuyên dùng ở đây, đó là cách giao thức động của Google Analytics bị cắt xén trông giống như lâu đời (trước khi họ chuyển từ ga.js sang analytics.js gần đây):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Thông tin thêm: https://developers.google.com/analytics/devguides/collection/gajs/
Trong phiên bản mới, họ đã sử dụng '//' để trình duyệt có thể tự động thêm giao thức:
'//www.google-analytics.com/analytics.js'
Vì vậy, nếu Google thích document.location đến window.location
khi họ cần giao thức trong JS, tôi đoán họ có một số lý do cho điều đó.
TỔNG QUAN : Cá nhân tôi tin điều đó document.location
và window.location
giống nhau, nhưng nếu khổng lồ với số liệu thống kê lớn nhất về việc sử dụng các trình duyệt như Google bằng cách sử dụng document.location , tôi khuyên bạn nên theo dõi chúng.
Trên thực tế tôi nhận thấy sự khác biệt về chrome giữa cả hai, Ví dụ: nếu bạn muốn điều hướng đến khung hình hộp cát từ khung con thì bạn có thể làm điều này chỉ với document.location chứ không phải với window.location