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