window.location =과 window.location.replace ()의 차이점은 무엇입니까?


273

이 두 줄 사이에 차이점이 있습니까?

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

3
나는 또한 이것을 여기에서 설명했다 : stackoverflow.com/questions/846954/…
Mathias Bynens

답변:


408

window.location "뒤로"를 클릭하고 현재 페이지로 되돌아 갈 수있는 항목을 내역에 추가합니다.

window.location.replace 현재 기록 항목을 대체하여 다시 갈 수 없습니다.

참조 window.location:

assign(url): 제공된 URL에 문서를 넣습니다.

replace(url): 현재 문서를 제공된 URL에있는 문서로 바꿉니다. 이 assign()방법 과 다른 점 replace()은 현재 페이지를 사용한 후에 는 세션 기록에 저장되지 않으므로 사용자가 뒤로 버튼을 사용하여 해당 페이지를 탐색 할 수 없다는 것입니다.

아 그리고 일반적으로 말하기 :

window.location.href = url;

다음보다 선호됩니다.

window.location = url;

52
window.location.href유리한 window.location가요?
Mathias Bynens


1
질문 window.location.replace(URL)-URL이 현재 URL과 정확히 동일한 위치를 사용하는 경우 URL을 새로 고치거나 다시로드 할 수 있습니까, 아니면 아무것도하지 않는 옵션이 있습니까?
user9645

11

TLDR;

사용 location.href또는 더 나은 사용window.location.href ;

그러나이 글을 읽으면 부인할 수없는 증거를 얻게됩니다.

진실은 사용하는 것이 좋지만 왜 의심스러운 일을 하는가? 당신은 더 높은 길을 타서 아마해야 할 방식으로해야합니다.

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

이 코드는 구문, 논리, 유형에 따라 완벽하게 정확합니다. 유일한 문제는 무엇입니까?

그것은이 location대신location.href

이건 어때?

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

의 가치는 mystring무엇입니까? 누군가 테스트를하지 않고 정말로 알고 있습니다. 여기서 무슨 일이 일어날 지 아무도 모릅니다. 지옥 나는 단지 이것을 썼고 그것이 무엇을하는지조차 모른다. location객체이지만 문자열을 할당하려고하면 문자열을 전달하거나 위치 객체를 전달합니다. 이것이 어떻게 구현되어야하는지에 대한 답변이 있다고합시다. 모든 브라우저가 동일한 작업을 수행하도록 보장 할 수 있습니까?

이것은 모든 브라우저가 똑같이 처리 할 것이라고 추측 할 수 있습니다.

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

타입 컴파일러에 이것을 타입 스크립트에 넣으면 그것이 깨질 것입니다. 타입 컴파일러는 이것이 객체라고 가정하기 때문입니다.

location그러나이 대화는 객체 보다 훨씬 더 깊 습니다. 어떤 종류의 프로그래머가되고 싶은가에 대한 이러한 전환은 무엇입니까?

이 지름길을 택하면 오늘은 괜찮을 것입니다. 내일은 괜찮을 수도 있습니다. 지옥은 영원히 괜찮을 수도 있지만 이제는 나쁜 프로그래머입니다. 그것은 당신을 위해 괜찮지 않을 것이고 그것은 당신을 실패 할 것입니다.

더 많은 개체가있을 것입니다. 새로운 구문이 있습니다.

문자열 만 가져 오지만 객체를 반환하는 게터를 정의 할 수 있으며 최악의 부분은 올바른 일을하고 있다고 생각할 것입니다. 여기서 사람들이 수치스럽게 당신을 타락하게했기 때문에이 영리한 방법에 대해 훌륭하다고 생각할 수 있습니다.

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

getter 및 setter를 사용하면이 코드가 실제로 작동하지만 수행 할 수 있다고해서 이것이 'WISE'라는 의미는 아닙니다.

프로그래밍을하는 대부분의 사람들은 프로그래밍을 좋아하고 더 좋아지는 것을 좋아합니다. 지난 몇 년 동안 나는 꽤 잘 받았고 많은 것을 배웠습니다. 내가 지금 라이브러리를 작성할 때 내가 아는 가장 중요한 것은 일관성과 예측 가능성입니다.

일관되게 할 수있는 일을하십시오.

+"2"<-여기에서 문자열을 숫자로 구문 분석합니다. 사용해야합니까? 아니면 사용해야 parseInt("2")합니까?

무엇에 대해 var num =+"2"?

당신이 배운 것, stackoverflow의 마음에서 나는 너무 희망적이지 않습니다.

이 두 단어를 일관성 있고 예측 가능하게 따르기 시작하면. stackoverflow에 대한 수많은 질문에 대한 정답을 알 수 있습니다.

이것이 어떻게 돈을 지불하는지 보여 드리겠습니다. 일반적으로 나는; 내가 쓰는 모든 자바 스크립트 줄에 합니다. 나는 그것이 더 표현 적이라는 것을 알고 있습니다. 나는 그것이 더 분명하다는 것을 안다. 나는 나의 규칙을 따랐다. 어느 날 나는하지 않기로 결정했습니다. 왜? 많은 사람들이 더 이상 필요하지 않으며 JavaScript가 없으면 JavaScript를 사용할 수 있다고 말합니다. 그래서 내가 이것을하기로 결정했습니다. 이제 나는 프로그래머로서의 내 자신을 확신하게 되었기 때문에 (언어 마스터 링의 열매를 즐기기 위해) 나는 아주 간단한 것을 썼고 확인하지 않았다. 쉼표 하나를 지우고 쉼표 하나를 제거하는 것과 같은 간단한 일을 다시 테스트해야한다고 생각하지 않았습니다.

나는 es6와 babel에서 이와 비슷한 것을 썼다.

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

이 코드는 실패했고 영원히 알아 내야했습니다. 어떤 이유로 그것이 본 것은

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

"hello world"는 함수가 아니라고 말하는 소스 코드 안에 숨겨져 있습니다.

더 재미있는 노드는 변환 된 코드의 소스 맵을 표시하지 않습니다.

너무 바보 같은 시간을 낭비했다. ES6가 얼마나 뛰어난 지에 대해 누군가에게 소개하고 디버깅을 시작하고 두통이없고 ES6이 얼마나 좋은지 보여 주어야했습니다. 설득력이 없습니다.

이것이 귀하의 질문에 대한 답변이 되었기를 바랍니다. 이것은 여전히 ​​학습중인 사람들에게 미래의 질문입니다.

사람들이 그것이 어떤 방식 으로든 문제가되지 않는다고 말할 때의 질문. 더 현명한 사람이 현명하게 말할 것입니다.

누군가 위치 개체를 덮어 쓰면 어떻게됩니까? 그들은 오래된 브라우저를 위해 shim을 할 것입니다. 새 기능이 필요하고 3 년 된 코드가 실패합니다.

숙고 할 마지막 메모.

깨끗하고 명확한 목적의 코드를 작성하면 코드에 대해 옳고 그름으로 대답 할 수없는 작업이 수행됩니다. 그것이하는 일은 코드를 인 에이 블러로 만드는 것입니다.

코드 간 중단을 두려워하지 않고 더 많은 플러그인, 라이브러리를 사용할 수 있습니다.

기록을 위해. 사용하다

window.location.href


24
긴 유익한 답변은 열정적으로 주장했다. 그러나 사용에 대한 주장에 window.location.href걸쳐 window.location, 당신은 질문이 실제로 이들과의 차이를 요구했다 잊었다window.location.replace()
AntonChanning

10
TLDR을 볼 때마다 5 배 더 길지 않은 SHORTER 답변을 기대합니다.
user9645

3
TLDR; use location.href or better use window.location.href; TLDR이이 줄입니다. 나머지는 "답변"입니다.
Elysiumplain

나는 당신이 드문 유스 케이스를 도입하여 유효한 지적을하지 않는다고 생각합니다. 즉 mystring = location.href = "#/some/spa/route". 게다가 많은 언어는 어떤 방식 으로든 (암시 적) 형 변환을 허용합니다. 하루가 끝나면 자바 스크립트는 동적 유형 언어이며 유형 개념을 적용하고 좋지 않다고 말하면 아무런 의미가 없습니다.
사과 사과

1
누군가가 위치 객체를 덮어 쓰면 어떻게 될까요 ? 글쎄, 누군가 덮어 console쓰거나 그림자를 씌우면 무엇을 말하는 것과 마찬가지로 window이제 더 큰 문제가 있습니다.
사과 사과
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.