2009-12-08 32 views
193

Có sự khác biệt giữa hai dòng này không?Sự khác nhau giữa window.location = và window.location.replace() là gì?

var url = "http://www.google.com/"; 
window.location = url; 
window.location.replace (url); 
+3

Tôi cũng giải thích này ở đây: http://stackoverflow.com/questions/846954/change-url-and-redirect-in-jquery/847130#847130 –

+0

Ngoài ra, 'href' và 'assign': http://stackoverflow.com/q/2383401/632951, http://stackoverflow.com/q/7703689/632951, http://stackoverflow.com/q/10302905/632951 – Pacerier

Trả lời

298

window.location thêm một mục để lịch sử của bạn trong đó bạn có thể (hoặc có thể) bấm vào nút "Back" và quay trở lại trang hiện tại.

window.location.replace thay thế mục lịch sử hiện tại để bạn không thể quay lại mục đó.

Xem window.location:

assign(url): Tải các tài liệu tại URL được cung cấp.

replace(url): Thay thế tài liệu hiện tại bằng tài liệu tại URL được cung cấp. Sự khác biệt từ phương pháp assign() là sau khi sử dụng replace() trang hiện tại sẽ không được lưu trong lịch sử phiên, nghĩa là người dùng sẽ không thể sử dụng nút Quay lại để điều hướng đến nó.

Oh và nói chung:

window.location.href = url; 

được ưa chuộng hơn:

window.location = url; 
+37

Tại sao' cửa sổ .location.href' được ưu tiên hơn 'window.location'? –

+10

Thảo luận tại đây: http://stackoverflow.com/questions/2383401/javascript-setting-window-location-href-versus-window-location – goodeye

+0

xem câu trả lời của tôi. –

7

TLDR;

sử dụng location.href hoặc sử dụng tốt hơn window.location.href;

Tuy nhiên nếu bạn đọc điều này, bạn sẽ đạt được bằng chứng không thể phủ nhận.

Sự thật là tốt để sử dụng nhưng tại sao những điều có vấn đề. Bạn nên đi theo con đường cao hơn và chỉ cần làm theo cách mà nó có thể nên được thực hiện.

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

Mã này hoàn toàn chính xác theo cú pháp, logic khôn ngoan, kiểu khôn ngoan bạn biết điều duy nhất sai với nó?

nó có location thay vì location.href

gì về vấn đề này

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

giá trị của mystring là gì? không ai thực sự biết mà không làm một số thử nghiệm. Không ai biết chính xác điều gì sẽ xảy ra ở đây. Tôi chỉ viết cái này và tôi thậm chí không biết nó làm gì. location là một đối tượng nhưng tôi chỉ định một chuỗi nó sẽ vượt qua chuỗi hoặc vượt qua đối tượng vị trí. Cho phép nói rằng có một số câu trả lời cho việc này nên được thực hiện như thế nào. Bạn có thể đảm bảo tất cả các trình duyệt sẽ làm điều tương tự?

Điều này tôi có thể đoán khá nhiều tất cả các trình duyệt sẽ xử lý như vậy.

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

Điều gì sẽ xảy ra nếu bạn đặt điều này vào loại bản ghi, nó sẽ bị phá vỡ vì trình biên dịch loại sẽ giả định là đối tượng?

Cuộc hội thoại này sâu hơn nhiều so với đối tượng location. Chuyển đổi này là gì về loại lập trình bạn muốn trở thành?

Nếu bạn thực hiện việc cắt ngắn này, bạn có thể không sao hôm nay, bạn có thể ổn vào ngày mai, nó có thể ổn mãi mãi, nhưng bạn bây giờ là một lập trình viên xấu. Nó sẽ không ổn cho bạn và nó sẽ thất bại bạn.

Sẽ có nhiều đối tượng hơn. Sẽ có cú pháp mới.

Bạn có thể định nghĩa một getter chỉ lấy một chuỗi nhưng trả về một đối tượng và phần tồi tệ nhất là bạn sẽ nghĩ rằng bạn đang làm điều gì đó đúng, bạn có thể nghĩ rằng bạn là tuyệt vời cho phương pháp thông minh này bởi vì mọi người ở đây đã xấu hổ dẫn bạn lạc lối .

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

Với getters và setters mã này thực sự hoạt động, nhưng chỉ vì nó có thể được thực hiện không có nghĩa là 'WISE' để làm như vậy.

Hầu hết mọi người đang lập trình yêu thích chương trình và yêu thích để cải thiện. Trong vài năm qua tôi đã nhận được khá tốt và học được rất nhiều. Điều quan trọng nhất tôi biết bây giờ đặc biệt là khi bạn viết Thư viện là tính nhất quán và khả năng dự đoán.

Làm những việc bạn luôn có thể làm.

+"2" < - quyền này phân tích cú pháp chuỗi thành một số. bạn nên sử dụng nó? hoặc bạn nên sử dụng parseInt("2")?

còn khoảng var num =+"2" thì sao?

Từ những gì bạn đã học, từ tâm trí của stackoverflow tôi không quá hy vọng.

Nếu bạn bắt đầu theo 2 từ này nhất quán và có thể dự đoán được. Bạn sẽ biết câu trả lời đúng cho một tấn câu hỏi trên stackoverflow.

Hãy để tôi chỉ cho bạn cách thức thanh toán này. Thông thường, tôi đặt ; trên mọi dòng javascript tôi viết. Tôi biết nó mang tính biểu cảm hơn. Tôi biết rõ hơn. Tôi đã tuân theo các quy tắc của tôi. Một ngày tôi quyết định không. Tại sao? Bởi vì rất nhiều người nói với tôi rằng nó không cần thiết nữa và JavaScript có thể làm mà không có nó. Vì vậy, những gì tôi quyết định làm điều này. Bây giờ bởi vì tôi đã trở thành chắc chắn về bản thân mình như một lập trình viên (vì bạn nên tận hưởng thành quả của việc làm chủ một ngôn ngữ), tôi đã viết một cái gì đó rất đơn giản và tôi đã không kiểm tra nó. Tôi đã xóa một dấu phẩy và tôi không nghĩ rằng tôi cần phải kiểm tra lại một thứ đơn giản như việc xóa một dấu phẩy.

tôi đã viết một cái gì đó tương tự như sau trong es6 và babel

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

Mã này thất bại và mất mãi mãi để tìm ra. Đối với một số lý do gì nó thấy là

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

ẩn sâu bên trong mã nguồn của nó đã nói với tôi "hello world" không phải là một hàm.

Đối với nút thú vị hơn không hiển thị bản đồ nguồn của mã được chuyển đổi.

Đã lãng phí quá nhiều thời gian ngu ngốc. Tôi đã trình bày cho một người nào đó về cách ES6 là tuyệt vời và sau đó tôi đã phải bắt đầu gỡ lỗi và chứng minh làm thế nào nhức đầu miễn phí và ES6 tốt hơn là. Không thuyết phục được.

Tôi hy vọng điều này đã trả lời câu hỏi của bạn. Đây là một câu hỏi cũ nó là nhiều hơn cho thế hệ tương lai, những người vẫn đang học.

Câu hỏi khi mọi người nói điều đó cũng không thành vấn đề. Cơ hội là một người có kinh nghiệm khôn ngoan hơn sẽ nói cho bạn những người khôn ngoan khác.

nếu ai đó ghi đè đối tượng vị trí. Họ sẽ làm một shim cho các trình duyệt cũ hơn. Nó sẽ nhận được một số tính năng mới mà cần phải được shimmed và mã 3 tuổi của bạn sẽ thất bại.

Lưu ý cuối cùng của tôi để suy ngẫm.

Viết mã rõ ràng, có mục đích rõ ràng làm điều gì đó cho mã của bạn không thể trả lời đúng hoặc sai. Những gì nó làm là nó làm cho mã của bạn trở thành một kẻ xâm nhập.

Bạn có thể sử dụng nhiều plugin bổ sung, Thư viện có lo sợ bị gián đoạn giữa các mã.

để lưu nội dung. sử dụng

window.location.href

+13

Câu trả lời thông tin dài, nhiệt tình lập luận. Nhưng trong tranh luận về việc sử dụng 'window.location.href' trên' window.location', bạn đã quên câu hỏi đã thực sự yêu cầu sự khác biệt giữa những điều này và 'window.location.replace()' – AntonChanning

+0

Bất cứ lúc nào tôi thấy TLDR tôi mong đợi SHORTER câu trả lời, không phải là một trong đó là 5x dài hơn. – user9645

Các vấn đề liên quan