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

조회수 1573회

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

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

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

2 답변

  • 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를 통해서 이벤트에 접근할지 고민하지 않아도 되는 것입니다.

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)