자바스크립트 삼항연산자 질문


웹문서내에 클릭 이벤트가 발생할때 이벤트객체가 생성되어 매개변수에 담기고 생성된 이벤트객체는 조건 연산자의 조건식을 만족시켜 theEvent 변수로 저장됩니다 이렇게 나와잇더라구요 조건식을보니

document.onclick = function(e){
thisEvent = e?e:window.event;
console.log(theEvent.속성);
}

조건식이 이상해요 참거짓을 충족시켜야되는데 이벤트객체가 매개변수에 담긴다고햇으니 e는 아니고 thisEvent = e 라고하기엔 대입연산자자나요? == ,=== 안에잇는 이벤트 객체를 비교할거면 이거둘중에 하나 나와야하는거아닌가요?

  • 2016년 06월 27일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 06월 24일에 작성됨

조회수 201


2 답변


좋아요
1
싫어요
채택취소하기
thisEvent = e?e:window.event

위와 같이 하는 이유는 브라우저마다 이벤트를 트리거(trigger, 호출)할 때, 이벤트 인자를 전달하는 방식이 달라서 그렇습니다.

IE(MS의 인터넷 익스플로러)의 경우, 매개인자로 이벤트 객체를 전달하지 않고, 글로벌 객체인 window.event를 통해서 이벤트를 전달합니다.

반면에 파이어폭스나 크롬의 경우 첫번째 인자에 이벤트 객체를 전달합니다.

따라서, 위에 언급한 모든 브라우저에서 되도록하기 위해서, 다음과 같은 트릭을 사용합니다.

thisEvent = e?e:window.event

만약 e가 null 이라면, IE일 것입니다. 따라서, thisEvent = window.event가 됩니다. 반대로 e가 null이 아니라면, IE가 아니라는 것임으로, thisEvent = e가 되도록 한것입니다.

어떤 경우에든 thisEvent에는 확실하게 이벤트객체를 가리키게 됨으로 후속 코드에서는 첫번째 매개인자(e)를 통해서 이벤트에 접근할 지, window.event를 통해서 이벤트에 접근할지 고민하지 않아도 되는 것입니다.

  • 2016년 06월 25일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.


아아 감사합니다 제가 자바스크립트를 처음접해봐서 if(객체) 가들어가도 조건식 참 거짓을 왜 만족시키는지 몰랏엇습니다ㅎㅎ 답변감사합니다

  • 2016년 06월 27일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close